Я создаю приложение angular 2 на простом JS. Моя проблема в том, что когда я перехожу со страницы на другую, она мерцает белой страницей, пока не будет отображено новое представление. Это происходит для всех компонентов только при первом доступе к ним. Если я иду по тому же маршруту во второй раз, страница загружается без белой страницы. Я делаю снимок экрана, чтобы лучше объяснить свою проблему: https://drive.google.com/file/d/0B5pOsXT-4rdTbmtuVnlUdXRMdE0/view?usp=sharing
Вот мой основной вид:
<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 определяется следующим образом:
AppComponent = ng.router
.RouteConfig([
{path: '/page1', name:"Page1", component: Page1Component, useAsDefault: true },
{path: '/page2', name:"Page2", component: Page2Component},
...
])
(AppComponent);
И все мои компоненты имеют файл .html и файл .css, например:
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;
}]
});
Судя по тому, что страницы углового кеша после того, как я к ним обращаюсь, и при втором доступе будут отображаться мгновенно (без мерцания белого). Я ищу, как я могу предварительно загрузить это, но я не могу найти никакого ответа или метода по этому поводу.
Пожалуйста, дайте мне знать, если вам нужно больше кода.
(Я не использую Page1, Page2 в реальном приложении, только для этого вопроса я изменил, например, чтобы он был более понятным)
Спасибо.
РЕДАКТИРОВАНИЕ: 18 марта 2016 г.
Я пытаюсь использовать DynamicComponentLoader для загрузки всех компонентов в скрытом div. Код выглядит так в AppComponent:
ngOnInit: function(){
this.dcl.loadIntoLocation(Page1Component, this.elementRef, 'preloadpages');
this.dcl.loadIntoLocation(Page2Component, this.elementRef, 'preloadpages');
},
и html, куда загружается: <div style="display: none;"><div #preloadpages></div></div>
Но столкнулся с 2 проблемами:
Если один из моих компонентов имеет в конструкторе RouteParams вот так:
конструктор: [ng.router.RouteParams, function(routeParam) { ... }], я получаю эту ошибку:
EXCEPTION: No provider for RouteParams! (class19 -> RouteParams)
Все компоненты загружаются так же, как вы его открываете. Если у меня есть вызов ajax в конструкторе, создается вызов ajax, и все компоненты html будут добавлены в мой скрытый div. Здесь может быть проблема с производительностью, если при запуске я пытаюсь загрузить около 5 компонентов, а некоторые делают вызовы ajax. Я ищу, есть ли решение для загрузки только html + css или для отправки флага конструктору компонента, чтобы знать, что я загружаю скрытый только для проповеди.
Спасибо.