Eu tenho uma configuração de rota 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'
});
}]);
Quero poder fazer com que o angularjs baixe as parciais no início e não quando solicitado.
É possível?
<script>
tag inline juntamente com inclusões do lado do servidor. Isso me permite manter minhas parciais como arquivos separados para fins organizacionais, mas ainda fornece tudo em um documento.Se você usar o Grunt para criar seu projeto, existe um plug-in que montará automaticamente suas parciais em um módulo Angular que inicia $ templateCache. Você pode concatenar este módulo com o restante do seu código e carregar tudo, desde um arquivo na inicialização.
https://npmjs.org/package/grunt-html2js
fonte
grunt-angular-templates
que faz o mesmo tipo de coisa - npmjs.org/package/grunt-angular-templates - funciona um tratamentoAdicione uma tarefa de construção para concatenar e registrar suas parciais html no Angular
$templateCache
. ( Esta resposta é uma variante mais detalhada da resposta de karlgold. )Para o grunhido , use modelos grunhidos-angulares . Para gulp , use gulp-angular-templatecache .
Abaixo estão os snippets de configuração / código para ilustrar.
Exemplo:
gulpfile.js Exemplo:
templates.js (esse arquivo é gerado automaticamente pela tarefa de construção)
index.html
fonte
Se você envolver cada modelo em uma tag de script, por exemplo:
Concatene todos os modelos em um arquivo grande. Se estiver usando o Visual Studio 2013, faça o download do essencial da Web - ele adiciona um menu com o botão direito do mouse para criar um Pacote HTML.
Adicione o código que esse cara escreveu para alterar o
$templatecache
serviço angular - é apenas um pequeno pedaço de código e funciona: Goj de Vojta JinaÉ
$http.get
isso que deve ser alterado para usar seu arquivo de pacote configurável:Suas rotas
templateUrl
devem ficar assim:fonte
Se você usar trilhos, poderá usar o pipeline de ativos para compilar e colocar todos os seus modelos haml / erb em um módulo de modelo que pode ser anexado ao seu arquivo application.js. Checkout http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading
fonte
Eu apenas uso
eco
para fazer o trabalho para mim.eco
é suportado pelo Sprockets por padrão. É uma abreviação de Embedded Coffeescript que pega um arquivo eco e é compilado em um arquivo de modelo Javascript, e o arquivo será tratado como qualquer outro arquivo js que você possui na sua pasta de ativos.Tudo o que você precisa fazer é criar um modelo com a extensão .jst.eco e escrever um código html, e os trilhos automaticamente compilarão e servirão o arquivo com o pipeline de ativos, e a maneira de acessar o modelo é realmente fácil:
JST['path/to/file']({var: value});
ondepath/to/file
é baseado no caminho lógico; portanto, se você tiver um arquivo/assets/javascript/path/file.jst.eco
, poderá acessar o modelo emJST['path/file']()
Para fazê-lo funcionar com angularjs, você pode passá-lo para o atributo template em vez de templateDir, e ele começará a funcionar magicamente!
fonte
Você pode passar $ state para o seu controlador e, quando a página carregar e chamar o getter no controlador, você chamará $ state.go ('index') ou qualquer parte parcial que desejar carregar. Feito.
fonte
Outro método é usar o cache de aplicativos do HTML5 para baixar todos os arquivos uma vez e mantê-los no cache do navegador. O link acima contém muito mais informações. As informações a seguir são do artigo:
Altere sua
<html>
tag para incluir ummanifest
atributo:Um arquivo de manifesto deve ser servido com o tipo MIME
text/cache-manifest
.Um manifesto simples se parece com isso:
Quando um aplicativo está offline, ele permanece em cache até que um dos seguintes itens ocorra:
fonte