Tengo una configuración de ruta como esta:
var myApp = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/landing', {
templateUrl: '/landing-partial',
controller: landingController
}).
when('/:wkspId/query', {
templateUrl: '/query-partial',
controller: queryController
}).
otherwise({
redirectTo: '/landing'
});
}]);
Quiero poder hacer que angularjs descargue los parciales al principio y no cuando se solicite.
¿Es posible?
<script>
etiqueta en línea junto con el lado del servidor incluye. Esto me permite mantener mis parciales como archivos separados para fines organizativos, pero aún entrega todo en un documento.Si usa Grunt para construir su proyecto, hay un complemento que ensamblará automáticamente sus parciales en un módulo angular que ceba $ templateCache. Puede concatenar este módulo con el resto de su código y cargar todo desde un archivo al inicio.
https://npmjs.org/package/grunt-html2js
fuente
grunt-angular-templates
que hace el mismo tipo de cosas - npmjs.org/package/grunt-angular-templates - funciona deAgregue una tarea de compilación para concatenar y registrar sus parciales html en Angular
$templateCache
. ( Esta respuesta es una variante más detallada de la respuesta de karlgold ) .Para gruñido , use grunt-angular-templates . Para gulp , use gulp-angular-templatecache .
A continuación hay fragmentos de configuración / código para ilustrar.
Ejemplo de gruntfile.js:
Ejemplo de gulpfile.js:
templates.js (este archivo es generado automáticamente por la tarea de compilación)
index.html
fuente
Si ajusta cada plantilla en una etiqueta de script, por ejemplo:
Concatenar todas las plantillas en 1 archivo grande. Si usa Visual Studio 2013, descargue los elementos esenciales de la Web: agrega un menú de clic derecho para crear un paquete HTML.
Agregue el código que este tipo escribió para cambiar el
$templatecache
servicio angular , es solo un pequeño fragmento de código y funciona: Vojta Jina's GistEs lo
$http.get
que debe cambiarse para usar su archivo de paquete:Sus rutas
templateUrl
deberían verse así:fuente
Si usa rieles, puede usar la canalización de activos para compilar y empujar todas sus plantillas haml / erb en un módulo de plantilla que se puede agregar a su archivo application.js. Checkout http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading
fuente
Solía
eco
hacer el trabajo por mí.eco
es compatible con Sprockets de forma predeterminada. Es una abreviatura de Embedded Coffeescript que toma un archivo eco y se compila en un archivo de plantilla Javascript, y el archivo se tratará como cualquier otro archivo js que tenga en su carpeta de activos.Todo lo que necesita hacer es crear una plantilla con la extensión .jst.eco y escribir un código html allí, y los rieles compilarán y servirán automáticamente el archivo con la canalización de activos, y la forma de acceder a la plantilla es realmente fácil:
JST['path/to/file']({var: value});
dondepath/to/file
se basa en la ruta lógica, por lo que si tiene un archivo/assets/javascript/path/file.jst.eco
, puede acceder a la plantilla enJST['path/file']()
Para que funcione con angularjs, puede pasarlo al atributo de plantilla en lugar de templateDir, ¡y comenzará a funcionar mágicamente!
fuente
Puede pasar $ state a su controlador y luego, cuando la página se carga y llama al getter en el controlador, llama a $ state.go ('index') o al parcial que desea cargar. Hecho.
fuente
Otro método es utilizar la caché de aplicaciones de HTML5 para descargar todos los archivos una vez y mantenerlos en la memoria caché del navegador. El enlace de arriba contiene mucha más información. La siguiente información es del artículo:
Cambie su
<html>
etiqueta para incluir unmanifest
atributo:Un archivo de manifiesto se debe servir con el tipo mime
text/cache-manifest
.Un manifiesto simple se parece a esto:
Una vez que una aplicación está fuera de línea, permanece en caché hasta que ocurre uno de los siguientes:
fuente