我有两个链接和网址,我是ngOnInit
动态获取的。
<li><a [routerLink]="welcomeUrl" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }">Getting Started</a></li>
<li><a [routerLink]="dashboardUrl" routerLinkActive="active" [routerLinkActiveOptions]="{ exact: true }">Dashboard</a></li>
这是我的组件:
ngOnInit() {
this.dataService.getOptions().subscribe((options: Options) => {
if (options.mode.toLowerCase() === "live") {
this.dashboardUrl = '/';
this.welcomeUrl = 'welcome';
} else {
this.dataService.getName().subscribe((name: string) => {
this.dashboardUrl = name;
this.welcomeUrl = name + '/welcome';
});
}
});
}
路线:
const routes: Routes = [
{ path: '', component: DashboardComponent },
{ path: 'welcome', loadChildren: 'app/welcome/welcome.module#WelcomeModule' },
{ path: ':name', component: DashboardComponent },
{ path: ':name/welcome', loadChildren: 'app/welcome/welcome.module#WelcomeModule' },
];
但是当我启动应用程序时,这些链接是活动的。点击改变网址的链接后,它们开始正常工作。
默认情况下,这些链接(网址)可能为空且始终处于活动状态?我该如何解决这个问题?
答案 0 :(得分:2)
首先,编写[routerLink]
(使用[ ]
)会使指令期望一个数组,因此您的代码应该是:
<a [routerLink]="welcomeUrl" routerLinkActive="active">...</a>
但我认为问题是由于代码的异步性质:routerLinkActive
在 welcomeUrl
设置之前执行并且无法完成其工作。
解决方案#1:使用*ngIf
(快速和肮脏)
使用测试包裹您的链接,只有在设置了变量后才显示它们:
<ul *ngIf="welcomeUrl && dashboardUrl">
<li><a [routerLink]="welcomeUrl" routerLinkActive="active">Getting Started</a></li>
<li><a [routerLink]="dashboardUrl" routerLinkActive="active">Dashboard</a></li>
</ul>
解决方案#2:移动异步调用(更强大但更多工作)
另一种选择是将异步调用 - this.dataService.getOptions()
- 移动到之前执行包含routerLinks的组件被激活的点。
如果不了解组件的组织方式,那么很难更具体,但是:
resolve
参数,并在解析中调用this.dataService.getOptions()
。解决方案将获取&#34;模式&#34;然后通过ActivatedRoute.data["mode"]
将其传递给组件。请参阅有关Resolve的文档:https://angular.io/docs/ts/latest/guide/router.html#resolve-guard this.dataService.getOptions()
并传递&#34;模式&#34;通过@Input
。在这两种情况下,想法都是一样的:找出&#34;模式&#34; 之前激活包含routerLinks的组件,因此您可以在执行 welcomeUrl
之前设置dashboardUrl
和routerLinkActive
变量。
要测试异步调用是否确实是问题的原因,请尝试使用*ngIf
解决方案,看看它是否有效。
答案 1 :(得分:0)
尝试一下:
d_sf$dst <- map_dbl(1:nrow(d_sf), function(x){
x <- d_sf[x,]
y <- centers_sf[centers_sf$g == x$g,]
st_distance(x, y)
})