通过routerLink角度路由器模板表达式传递数据?

时间:2018-05-26 21:01:16

标签: javascript html angular angular-router

使用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实例才能使其生效?

1 个答案:

答案 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>

routeOneNameAppComponent中声明的变量。

如果你想看看,我已经创建了StackBlitz here的一个分支