使用stackblitz起点,我添加了以下路由:
const routes : Routes = [ {path: 'hello', 'component': HelloComponent}];
@NgModule({
imports: [
RouterModule.forRoot(routes, {enableTracing: true}) ],
declarations: [ AppComponent, HelloComponent ],
})
还在<router-outlet>
模板中添加了app-component.html
,并在点击以下链接时呈现了hello-component
:
<a routerLink="hello" routerLinkActive="active">hello</a>
但是,单击链接时hello-component
组件上的属性为空:
@Input() name: string;
是否有办法通过模板表达式传递值,以便在组件上设置name属性,并在hello-component.ts
的模板字符串中进行评估,并单击hello
锚点?
仅供参考,hello组件如下所示:
import { Component, Input } from '@angular/core';
@Component({
selector: 'hello',
template: `<h1>Hello {{name}}!</h1>`,
styles: [`h1 { font-family: Lato; }`]
})
export class HelloComponent {
@Input() name: string;
}
似乎可能需要检查一个ActivatedRoute
实例才能使其生效?
答案 0 :(得分:1)
首先,修改路由定义以允许路径参数,如下所示:
const routes : Routes = [
{path: 'crisis-center', 'component': HelloComponent},
{path: 'hello/:name', 'component': HelloComponent},
{path: '**', 'component': HelloComponent}
];
这样您就可以将name
参数传递给/hello
路线。
要在组件中访问它,您需要订阅参数更改,如下所示:
export class HelloComponent {
@Input() name: string;
constructor(private route: ActivatedRoute) {
}
ngOnInit(){
this.route.paramMap.subscribe( params =>
this.name = params.get('name')
)
}
}
最后,您可以通过routerLink
传递值,如下所示:
<a [routerLink]="['hello', routeOneName]" routerLinkActive="active">hello</a>
routeOneName
是AppComponent
中声明的变量。
如果你想看看,我已经创建了StackBlitz here的一个分支