Nginx Angular2路由器:更改路由不';不要第一次加载部件
我正在将angular2应用程序的路径从“/”更改为“/xyz”。对于“xyz”,我制作了一个名为XYZComponent的组件。这个XYZ组件为路由器生命周期实现了一个名为“CanActivate”的钩子。在这个钩子中,我正在为新路线更改页面标题Nginx Angular2路由器:更改路由不';不要第一次加载部件,nginx,angular,systemjs,angular2-routing,angular2-directives,Nginx,Angular,Systemjs,Angular2 Routing,Angular2 Directives,我正在将angular2应用程序的路径从“/”更改为“/xyz”。对于“xyz”,我制作了一个名为XYZComponent的组件。这个XYZ组件为路由器生命周期实现了一个名为“CanActivate”的钩子。在这个钩子中,我正在为新路线更改页面标题 @CanActivate((next, prev) => { document.title = "mysite | xyz" return true; }) 然后我为这个组件实现OnInit并调用方法“ngOnInit()”
@CanActivate((next, prev) => {
document.title = "mysite | xyz"
return true;
})
然后我为这个组件实现OnInit并调用方法“ngOnInit()”。在这个方法中,我调用服务器来提供一些数据。该数据存储在名为xyzData的变量中,该变量绑定到模板。我的模板是:
<div class="xyzComp">
<p>{{xyzData.msg}}</p>
</div>
通过单击我的应用程序标题中名为xyzBtn的按钮,调用_route.navigate([“XYZ”])来更改路由。所有路由的标头都是常量
问题是,当我第一次单击xyzBtn时,它只调用在XYZComponent的@CanActivate decorator中编写的内容。下次单击xyzBtn时,不会调用@CanActivate,但这次会调用ngOnInit()
请帮我做这个。只有在服务器上部署代码时,才会出现此问题。部署服务器是NGINX服务器。在nginx服务器上,我们已配置为忽略前端路由
然而,我的代码在开发服务器上运行良好,开发服务器是一个名为LiteServer的npm模块
更新-它在其他基于npm的服务器(如http服务器)上运行良好
更新2-Plunker:
更新3-我正在服务器中使用捆绑文件。通过systemjs builder构建捆绑包。这可能是个问题吗?这个问题没有具体的答案。只是Angular2和SystemJs都处于测试阶段。不能使用angular2或其相关模块的缩小文件。此外,您不能将系统js模块与非系统js javascript文件组合 因此,如果您的项目中有say-nonsys.js、sys1.js和sys2.js文件。您不能将这三个组件捆绑在一起并从服务器提供服务。但您可以将sys1.js和sys2.js组合成sys-all.js,然后从服务器到浏览器提供两个不同的文件 对不起,伙计们,这不仅仅是Angular2的问题,而是系统js的问题。
问题通过移除系统polyfill解决了能否请您提供一个Plunk?很难看到您正在使用这些信息片段做什么。(等待plunkr),顺便说一句
@CanActivate
在这里似乎不必要,您在未经任何检查的情况下返回true
。您可以在ngOnInit()
中设置标题。“配置为忽略前端路由”是什么意思?这实际上是一个服务器或服务器配置问题,而不是角度问题?您使用的是Angulars*.min.js
脚本文件吗?我想它们还是坏了。试试*.dev.js
。
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);
});
}