Я меняю маршрут приложения angular2 с '/' на '/xyz'. Для xyz я создал компонент с именем XYZComponent. Этот XYZComponent реализует хук для жизненного цикла маршрутизатора с именем «CanActivate». В этом хуке я меняю заголовок страницы для нового маршрута.
@CanActivate((next, prev) => {
document.title = "mysite | xyz"
return true;
})
Затем я реализую OnInit для этого компонента и вызываю метод "ngOnInit()". В этом методе я вызываю сервер, чтобы дать мне некоторые данные. Эти данные хранятся в переменной с именем xyzData, которая привязана к шаблону. Мой шаблон:
<div class="xyzComp">
<p>{{xyzData.msg}}</p>
</div>
Онинит это:
ngOnInit(){
console.log("xyz component init");
this._myRestfulService.getXyz()
.subscribe(data => {
console.log("success",data);
this.xyzData = data;
}, err => {
this.xyzData = {msg:"cannot get data"};
console.log("error", err);
});
}
Изменение маршрута выполняется путем вызова _route.navigate(["XYZ"]) нажатием кнопки с именем xyzBtn, которая присутствует в заголовке моего приложения. Заголовок является постоянным для всех маршрутов.
Проблема в том, что когда я нажимаю xyzBtn в первый раз, он вызывает только то, что написано в декораторе @CanActivate XYZComponent. В следующий раз, когда я нажимаю xyzBtn, @CanActivate не вызывается, но на этот раз вызывается ngOnInit().
Пожалуйста помоги мне с этим. Эта проблема возникает только тогда, когда я развертываю свой код на сервере. Сервер развертывания — сервер NGINX. На сервере nginx мы настроили игнорирование маршрутов внешнего интерфейса.
Однако мой код отлично работает на сервере разработки, который представляет собой модуль npm с именем lite-server.
Обновление. Он хорошо работает на других серверах на основе npm, таких как http-сервер.
Update2 — Plunker: https://plnkr.co/edit/E4HNXEjaIP7th77UE4dK?p=preview
Update3 - я использую пакетный файл на сервере. Сборка пакета через сборщик systemjs. Может ли это быть проблемой?
@CanActivate
здесь кажется ненужным, вы возвращаетеtrue
без какой-либо проверки. И вы можете установить заголовок вngOnInit()
. - person Ankit Singh   schedule 21.04.2016*.min.js
? Я думаю, что они все еще сломаны. Вместо этого попробуйте*.dev.js
. - person Günter Zöchbauer   schedule 21.04.2016