Buduję aplikację kątową 2 w prostym JS. Mój problem polega na tym, że gdy przechodzę od strony na drugą, miga ona białą stroną do momentu wyświetlenia nowego widoku. Dzieje się tak w przypadku wszystkich komponentów tylko po raz pierwszy, gdy uzyskuję do nich dostęp. Jeśli przejdę do tej samej trasy po raz drugi, strona zostanie załadowana bez białej strony. przechwycić ekran, aby lepiej wyjaśnić mój problem: https://drive.google.com/file/d/0B5pOsXT-4rdTbmtuVnlUdXRMdE0/view?usp=sharingJak wstępnie załadować widoki kątowe2, aby nie migotały białe strony przy pierwszym załadowaniu?
Tu jest mój główny widok:
<router-outlet></router-outlet>
<nav id="menu">
<a [routerLink]="['Page1']">Page 1</a>
<a [routerLink]="['Page2']">Page 2</a>
<a [routerLink]="['Page3']">Page 3</a>
<a [routerLink]="['Page4']">Page 4</a>
<a [routerLink]="['Page5']">Page 5</a>
</nav>
RouteConfig jest zdefiniowany następująco:
AppComponent = ng.router
.RouteConfig([
{path: '/page1', name:"Page1", component: Page1Component, useAsDefault: true },
{path: '/page2', name:"Page2", component: Page2Component},
...
])
(AppComponent);
I wszystkie moje elementy mają .html plik i plik .css podobny do tego:
Page1Component = ng.core
.Component({
selector: 'rl-page1',
templateUrl: 'app/components/page1/view.html',
styleUrls: ['app/components/page1/style.css'],
directives: [ng.router.ROUTER_DIRECTIVES]
})
.Class({
constructor: [ng.router.Router, function(router) {
this.router = router;
}]
});
Z tego, jak wyglądają kanciaste strony podręczne po uzyskaniu do nich dostępu, a przy drugim dostępie będzie wyświetlany natychmiast (bez białego migotania). Szukam, jak mogę to zrobić, ale nie mogę znaleźć żadnej odpowiedzi ani metody na ten temat.
Proszę dać mi znać, jeśli potrzebujesz więcej kodu.
(nie używam Strona1, Strona2 w prawdziwej aplikacji, tylko na to pytanie I zmienił się bardziej jasne, na przykład)
Dzięki.
EDIT: 2016-03-18
próbuję użyć DynamicComponentLoader załadować wszystkie składniki w ukrytym div. Kod wygląda następująco w AppComponent:
ngOnInit: function(){
this.dcl.loadIntoLocation(Page1Component, this.elementRef, 'preloadpages');
this.dcl.loadIntoLocation(Page2Component, this.elementRef, 'preloadpages');
},
i html gdzie jest ładowany jest: <div style="display: none;"><div #preloadpages></div></div>
Ale w obliczu 2 problemy:
Jeśli jeden z moich składnik ma w konstruktorze RouteParams like this:
Konstruktor: [ng.router.RouteParams, funkcja (routeParam) { ... }], Otrzymuję ten błąd:
EXCEPTION: No provider for RouteParams! (class19 -> RouteParams)
Wszystkie składniki są ładowane tak, jak je otwierasz. Jeśli mam wywołanie ajax w konstruktorze, to wywoływane jest wywołanie ajax, a wszystkie składniki html będą dołączane do mojego ukrytego div. Tutaj może być problem z wydajnością, jeśli na starcie próbuję załadować jak 5 komponentów, a niektóre wykonują wywołania ajaxowe. Sprawdzam, czy istnieje rozwiązanie do załadowania tylko html + css lub wysłania flagi do konstruktora komponentów, aby wiedzieć, że ładuję ukryty tylko dla głoszenia.
Dzięki.
Witam. W końcu muszę zrobić roboczą wersję tego. Jeśli tylko spróbuję załadować 1 stronę, działa dobrze. Jeśli spróbuję załadować więcej niż 1, pojawia się błąd. Oto html: '
Czy masz parametr 'RouteParams' jako parametr w jednym ze składników? –
Tak. Mam w konstruktorze coś takiego: 'konstruktor: [ng.router.Router, ... funkcja (router, ...) {...}' –