【发布时间】:2017-08-14 07:13:06
【问题描述】:
我有一个主要组件,其中有一个路由器插座。在路由器插座中加载的组件中,我获取 url 参数,如下所示:
ngOnInit(): void {
// _route is injected ActivatedRoute
this._route.params.subscribe((params: Params) => {
if(params['url']){
this.testUrl = params['url'].replace(new RegExp('\%2[fF]', 'g'), '/');
}
});
}
这很好用,但是当我在顶级组件上尝试它时,params 对象始终为空。我不明白为什么嵌套组件参数对象中有数据,我试图以完全相同的方式访问它。没有错误可以继续,param 对象只是空的。
为什么我的父组件没有从ActivatedRoute获取正确的Params对象?
编辑:
作为请求的完整父组件
import { OnInit, Component, Directive } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
})
export class AppComponent {
public testUrl: string;
constructor(private router: Router, private _route: ActivatedRoute) {
}
ngOnInit(): void{
this._route.queryParams.subscribe((params: Params) => {
console.log(params);
if (params['url']) {
this.testUrl = params['url'].replace(new RegExp('\%2[fF]', 'g'), '/');
alert(params['url']);
}
});
}
}
app.module.ts 的路由器代码:
RouterModule.forRoot([
{ path: '', component: CheckMobileComponent },
{ path: '**', component: CheckMobileComponent }
]),
嵌套模块的路由器代码:
RouterModule.forChild([
{ path: 'report', component: MobileReportComponent }
我的 app.component 没有直接指定的路由,因为它是由 index.html 中的选择器加载的。
【问题讨论】:
-
分享你的父组件代码
-
@Sid 更新问题
-
请也添加您的路线代码
-
@Sid 再次更新
-
存在(我认为仍然)延迟加载组件的一些问题,以及观察
.params和.data变化的能力。如果遇到这种情况,您可能需要观察 NavigationEnd 事件,然后访问activatedRoute.snapshot。
标签: angular typescript