2014-05-14 25 views
6

Sto sviluppando un'applicazione a singola pagina, con l'aiuto di AngularJS e io sono nuovo ad esso Ho già fatto la stessa domanda ma non ho ricevuto alcuna risposta, quindi sto riformulando la mia domanda e la chiedo di nuovorende Angular JS funziona offline

LA DOMANDA: Quello che devo fare è rendere la mia app Web abilitata a lavorare offline per questo scopo i file html che sono resi come view (ad esempio home.html) dovrebbero essere inclusi in qualche modo nell'indice. html, quindi quando clicchi su alcuni link non ci dovrebbe essere bisogno di avere accesso ad un file html invece una parte della stessa pagina per esempio verrà reso un immersione, quali modifiche dovrei apportare al progetto per ottenere questo risultato

al momento ho fatto diversi file html e li usano come modelli durante il rendering di vista, la struttura di applicazione è simile a questo:

- index.html   
    - pages    
    ----- home.html 
    ----- profile.html 

qui è il codice per config i percorsi e controller e viste

var formApp = angular.module('formApp', ['ngRoute']); 

    formApp.config(function($routeProvider) { 
    $routeProvider 
     .when('/', { 
      templateUrl : 'main', 
      controller : 'mainController' 
     }) 
    .when('/profile', { 
     templateUrl : 'profile', 
     controller : 'profileController' 
    }) 
    }); 

e e il mio file main.html ad esempio è come questo:

<div class="jumbotron text-center"> 
    <h1>Main Page</h1> 

    <p>{{ message }}</p> 
    </div> 

e da qualche parte nel index.html ho

  <div ng-view> 
       {{ message }} 
      </div> 

Il codice funziona correttamente e tutto è andato bene in questo momento

+0

non proprio sicuro di cosa stai chiedendo ... come includere un modello nel mio index.html? quindi [ng-include] (https://docs.angularjs.org/api/ng/directive/ngInclude) può aiutarti – nilsK

+1

Se stai chiedendo come eseguire un server locale, puoi leggere la risposta a questa domanda: http://stackoverflow.com/questions/19502978/do-angular-views-work-when-a-site-is-served-from-the-local-file-system – Julien

+0

@nilsK scusa se non era abbastanza chiaro Ho fatto un po 'di modifiche fatemi sapere se è più leggibile ora – Siavosh

risposta

12

Per rendere il vostro lavoro di applicazione offline, è necessario memorizzare nella cache tutti i file con la cache HTML5 manifesta. Anche il .html file, immagini, css, tutto ...

Il nativo caching "vecchio" non funziona qui, perché richiede ancora comunicare con il server di avere il "304 Not Modified "codice http.

Il manifest rimuove questo passaggio e non richiede nemmeno il server per le risorse.

Un esempio palese:

CACHE MANIFEST 
/angular.js 
/index.html 
/page/home.html 
/page/profile.html 
NETWORK: 
* 

Come includono e uso cache di controllo manifestare: http://www.w3schools.com/html/html5_app_cache.asp

Per il debugging:

Cancellazione di una cache app sotto cromo Inserisci URL "chrome: // appcache-internals /"


EDIT: A causa di commentare e fuori tema

Invece di mettere il codice html in molti file codice HTML, è possibile includere nell'indice.html come questo:

<script type="text/ng-template" id="one.html"> 
    <div>This is first template</div> 
</script> 

Allora la vostra templateURL è "uno.html" senza sottotracciato.

Controlla i documenti: https://docs.angularjs.org/api/ng/directive/script

Suggerimento:

Non avete bisogno di collocare i percorsi lì. Durante la fase di rendering, angularjs memorizzerà ogni file html nello $templateCache sotto il suo id inserito in quegli elementi di script.

+0

Grazie per la risposta è stato utile così ho votato, ma ancora non sono sicuro se risolve il mio problema, c'è un modo in cui tempalteUrl nelle rotte indirizza qualche div all'interno dell'indice file .html invece di un altro file html – Siavosh

+0

ad esempio con l'aiuto di una sorta di javascript o di template angolare perché in questo modo penso che almeno una volta il file debba essere scaricato (dopo il primo download funzionerà offline) ma ho bisogno di quelli modelli da includere nel file index.html dal molto inizio – Siavosh

+1

sì, è necessario visitare la pagina una volta, per memorizzare tutto in cache. E sì, puoi inserire tutti i file html parziali nell'index.html, ma questo non lo rende accessibile offline, dal momento che devi comunque richiedere l'url/server. –

1

Questo potrebbe non essere del 100% applicabile a voi. A seconda della soluzione & o della piattaforma che stai utilizzando ... Ma ho un'applicazione di prototipo su cui sto lavorando attualmente, costruita in Angular e Node.

Anche se questo è stato anche il mio primo tentativo di qualcosa di simile ... EG memorizza tutte le pagine nella cache in anticipo. Questo sembra funzionare abbastanza bene.

Tutte le mie pagine vengono convertite in un formato cache friendly durante la fase di costruzione. Ma nella mia soluzione, sono ancora pagine html regolari.

home.tpl.html

<div class="well home-menu"> 
    HOME 
</div> 

templates.js

angular.module('templates', ['home.tpl.html']); 

angular.module("home.tpl.html", []).run(["$templateCache", function($templateCache) { 
    $templateCache.put("home.tpl.html", 
     "<div class=\"well home-menu\">\n" + 
     "HOME\n"+ 
     "</div>"); 
}]); 

regolatore

angular.module('myApp.home', ['templates']) 
.config(function ($stateProvider) { 
    $stateProvider 
    .state('app.home', { 
     url: '/home', 
     templateUrl: 'home.tpl.html', 
     controller: 'HomeController' 
    }); 
}) 
.controller('HomeController', function ($scope) { 
    //do something 
}); 

tutta questa magia per gentile concessione di html2js

grunt.loadNpmTasks ('grunt-html2js');

... Credo che sia possibile ottenere questo effetto in vari altri modi che non richiedono grugnito. Ad esempio, creando manualmente i modelli nel file js ... ma non mi sognerei di raccomandare quel percorso, perché potrebbe trasformarsi in un incubo in fretta

+0

Grazie per la risposta, proverei più tardi a farlo funzionare in qualche modo e farti sapere – Siavosh

+1

Ecco un esempio di una soluzione che contiene questo framework i menzionato. https://github.com/mrgamer/angular-login-example –