来自ngFor项的动态routerLink值给出错误"得到插值({{}})其中表达式是预期的"

时间:2016-05-06 17:45:21

标签: angular angular2-directives

我试图根据组件中的一组动态项设置指令中的routerLink值。但Angular2引发了一个错误:

EXCEPTION: Template parse errors:
Parser Error: Got interpolation ({{}}) where expression was expected at column 1 in [ {{item.routerLink}} ] in AppHeader@5:40 ("
    <a *ngFor="let item of headerItems" [ERROR ->][routerLink]=" {{item.routerLink}} ">
      {{item.text}}
    </a>
"): Header@5:40

header.component.ts

import {Component} from '@angular/core';
import {ROUTER_DIRECTIVES} from '@angular/router-deprecated';

@Component({
  selector: 'app-header',
  templateUrl: './app/components/header/header.component.html',
  directives: [ROUTER_DIRECTIVES]
})
export class AppHeader {
  headerItems: Object[] = [];

  constructor() {
    this.headerItems.push(
      { classes: 'navLink', routerLink: ['/Home'], text: 'Home' }
    );
  }
}

header.component.html

<div id="HeaderRegion">
  <nav class="nav">
    <a *ngFor="let item of headerItems" [routerLink]=" {{item.routerLink}} ">
      {{item.text}}
    </a>
  </nav>
</div>

6 个答案:

答案 0 :(得分:81)

您无法使用[]结合{{}}前者或后者

[routerLink]="item.routerLink"

应该做你想做的事。

routerLink="{{item.routerLink}}"

会将item.routerLink.toString()绑定到routerLink属性。

答案 1 :(得分:5)

您也可以使用以下代码传递包含某些文本的表达式。

<div *ngFor="let customer of customers">
   <a [routerLink]="'customer/'+customer.index">Link</a>
</div>

答案 2 :(得分:3)

您可以在此时找到答案,因为我删除{{}}解决了类似的问题。你的代码可能是

<a *ngFor="let item of headerItems" [routerLink]="item.routerLink">
  {{item.text}}
</a>

答案 3 :(得分:2)

如果要通过从ngFor获取动态值来创建路由器链接,可以使用以下示例进行操作

<div *ngFor = "let item of items"> 
<a [routerLink] = "['./item-details/' + item.id]">{{item.name}}</a></div>

也就是说,只需将您收到的值附加到要导航的网址即可。

答案 4 :(得分:0)

这样的事情对我们有用:

<input type="checkbox" [id]="['btn.botStepState-'+i]" [(ngModel)]="btn.botStepState" name="btn.botStepState-{{i}}" (change)="changeHandler($event)" class="cbx hidden" />
  • 属性绑定[]需要[]来评估值
  • 模型绑定,即[()]无需任何特殊内容
  • 插值,即{{}}可与常规属性一起使用
  • 事件绑定,即()与函数
  • 配合得很好

答案 5 :(得分:0)

我有一个如何使您的路线动态化的示例

在您的html组件中

<ul class="nav side-menu">
                <li *ngFor="let data of dataPermiso;let i= index">
                  <a><i class="{{data.icono}}"></i> {{data.categoria}} <span class="fa fa-chevron-down"></span></a>
                  <ul class="nav child_menu">
                    <li *ngFor="let item of data.permisoList;let a = index">
                      <a [routerLink]="item.ruta">{{item.titulo}}</a>
                    </li>
                  </ul>
                </li>
</ul>

您的组件ts

  public dataPermiso:any[] = [];

  constructor(private loginserv: LoginService) {
    this.loadPermiso();
  }



  ngOnInit() {

  }

  public loadPermiso(){
    this.loginserv.listPermisos(this.dataStorage.idrol).subscribe((data)=>{
      this.dataPermiso= data;
    });
  }