Mam taką konfigurację trasy:
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'
});
}]);
Chcę być w stanie zmusić angularjs do pobrania obu części na początku, a nie na żądanie.
Czy to możliwe?
<script>
tagu wbudowanego wraz z dołączeniami po stronie serwera. To pozwala mi przechowywać moje częściowe jako osobne pliki do celów organizacyjnych, ale nadal dostarcza wszystko w jednym dokumencie.Jeśli użyjesz Grunta do zbudowania swojego projektu, istnieje wtyczka, która automatycznie połączy twoje częściowe w moduł Angular, który ładuje $ templateCache. Możesz połączyć ten moduł z resztą kodu i załadować wszystko z jednego pliku podczas uruchamiania.
https://npmjs.org/package/grunt-html2js
źródło
grunt-angular-templates
co robi to samo - npmjs.org/package/grunt-angular-templates - działa na ucztęDodaj zadanie kompilacji, aby połączyć i zarejestrować swoje częściowe HTML w Angular
$templateCache
. ( Ta odpowiedź jest bardziej szczegółowym wariantem odpowiedzi Karlgolda. )Do chrząkania użyj szablonów chropowatych . W przypadku łyka użyj gulp-angular-templatecache .
Poniżej znajdują się fragmenty konfiguracji / kodu do zilustrowania.
gruntfile.js Przykład:
gulpfile.js Przykład:
templates.js (ten plik jest generowany automatycznie przez zadanie kompilacji)
index.html
źródło
Jeśli otoczysz każdy szablon znacznikiem skryptowym, np .:
Połącz wszystkie szablony w 1 duży plik. Jeśli korzystasz z programu Visual Studio 2013, pobierz podstawowe informacje o sieci - dodaje menu prawym przyciskiem myszy, aby utworzyć pakiet HTML.
Dodaj kod, który ten facet napisał, aby zmienić
$templatecache
usługę kątową - to tylko mały fragment kodu i działa: Gist Vojty JinyTo
$http.get
należy zmienić, aby użyć pliku pakietu:Twoje trasy
templateUrl
powinny wyglądać tak:źródło
Jeśli używasz szyn, możesz użyć potoku zasobów do skompilowania i przesunięcia wszystkich szablonów haml / erb do modułu szablonów, który można dołączyć do pliku application.js. Zamówienie http://minhajuddin.com/2013/04/28/angularjs-templates-and-rails-with-eager-loading
źródło
Po prostu
eco
robię to dla siebie.eco
jest domyślnie obsługiwany przez Sprockets. Jest to skrót od Embedded Coffeescript, który pobiera plik eco i kompiluje do pliku szablonu JavaScript, a plik będzie traktowany jak każdy inny plik js, który masz w folderze zasobów.Wszystko, co musisz zrobić, to utworzyć szablon z rozszerzeniem .jst.eco i napisać tam kod HTML, a szyny automatycznie skompilują się i udostępnią plik z potokiem zasobów, a dostęp do szablonu jest naprawdę łatwy:
JST['path/to/file']({var: value});
gdziepath/to/file
opiera się na ścieżce logicznej, więc jeśli masz plik/assets/javascript/path/file.jst.eco
, możesz uzyskać dostęp do szablonu pod adresemJST['path/file']()
Aby działał z angularjs, możesz przekazać go do atrybutu template zamiast templateDir i zacznie on działać magicznie!
źródło
Możesz przekazać stan $ do swojego kontrolera, a następnie gdy strona ładuje się i wywołuje getter w kontrolerze, wywołujesz $ state.go („indeks”) lub dowolną część, którą chcesz załadować. Gotowe.
źródło
Inną metodą jest użycie pamięci podręcznej aplikacji HTML5 do jednokrotnego pobrania wszystkich plików i zachowania ich w pamięci podręcznej przeglądarki. Powyższy link zawiera znacznie więcej informacji. Z artykułu pochodzą następujące informacje:
Zmień
<html>
tag, aby zawierałmanifest
atrybut:Plik manifestu musi zostać podany z typem MIME
text/cache-manifest
.Prosty manifest wygląda mniej więcej tak:
Gdy aplikacja jest offline, pozostaje w pamięci podręcznej, dopóki nie zdarzy się jedna z poniższych sytuacji:
źródło