【发布时间】:2018-12-19 20:13:40
【问题描述】:
在我的 Angular 组件中,我试图获取一个从路由中手动传递的变量。我遵循了本教程:https://hassantariqblog.wordpress.com/2017/02/26/angular2-retrieve-data-property-from-angular2-routes/。首先,在我的路由文件中,我向我的路由对象添加了一个数据属性,我在其中定义了我想要传递的内容:
{
path: ':id/dashboard/:sectionIndex',
component: CampaignDashboardComponent,
data: {
section: 'dashboard' // this is what I need to retrieve in the component
}
},
这是我的组件:
import { Component, Input, OnInit } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
@Component({
selector: 'campaign-menu',
templateUrl: './campaignMenu.component.html',
})
export class CampaignMenu implements OnInit {
public sectionKey: string;
constructor(
private router: Router,
) {}
ngOnInit() {
this.router.events
.filter((event: any) => event instanceof NavigationEnd)
.subscribe(() => {
var root = this.router.routerState.snapshot.root;
while (root) {
if (root.children && root.children.length) {
root = root.children[0];
} else if (root.data && root.data["section"]) {
this.sectionKey = root.data["section"];
alert(this.sectionKey);
return;
} else {
return;
}
}
});
}
}
为了完成这项工作,我必须在浏览器的地址栏中手动更改路线。如果我只是重新加载页面,则不会定义 sectionKey 变量。当我手动更改路线时,变量被定义,我在警报中看到它。但是,该变量立即再次变得未定义,我通过尝试在模板中显示该变量来证明这一点。您知道为什么会导致此变量未定义吗?
【问题讨论】:
-
手动更改路线是什么意思?那条路线是什么,你改成什么路线?当你再次重新加载时,显示的 url 是什么?
-
我必须在浏览器的地址栏中手动更改路线。例如。将
/campaigns/1/dasbhoard更改为/campaigns/2/dashboard。如果我重新加载,URL 保持不变。无论如何,我现在意识到当我重新加载一个页面时,它不能很好地与 Angular 的路由器一起工作。另一方面,如果我在链接之间单击,使用 Angular 的路由器,则变量保持定义。所以我猜我需要强制我的页面在页面加载时使用 Angular 的路由器,如果这有意义的话...... -
reload和click between the links都将由 Angular 的路由器处理。我不明白这是怎么回事。 -
嗯,这很奇怪。也许我没有正确描述它。我所知道的是,当我用浏览器重新加载时它不起作用。
标签: angular url parameters routes components