Динамическое значение routerLink из ngFor, указывающее сообщение об ошибке "Полученная интерполяция ({{}}), где ожидалось выражение"
Я пытаюсь установить значение routerLink
в директиве на основе динамического набора элементов из компонента. Но из Angular2 выдается ошибка:
EXCEPTION: Template parse errors:
Parser Error: Got interpolation ({{}}) where expression was expected at column 1 in [ {{item.routerLink}} ] in [email protected]:40 ("
<a *ngFor="let item of headerItems" [ERROR ->][routerLink]=" {{item.routerLink}} ">
{{item.text}}
</a>
"): [email protected]: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>
Ответы
Ответ 1
Вы не можете использовать []
сочетании с {{}}
ни первым, ни последним
[routerLink]="item.routerLink"
Должен делать то, что вы хотите.
routerLink="{{item.routerLink}}"
будет связывать item.routerLink.toString()
со свойством routerLink
.
Ответ 2
Вы также можете использовать следующий код для передачи выражения с некоторым текстом.
<div *ngFor="let customer of customers">
<a [routerLink]="'customer/'+customer.index">Link</a>
</div>
Ответ 3
Вы могли бы найти ответ к этому времени, потому что я удалял {{}} решение аналогичной проблемы. Ваш код может быть
<a *ngFor="let item of headerItems" [routerLink]="item.routerLink">
{{item.text}}
</a>
Ответ 4
Что-то вроде этого сработало для нас:
<input type="checkbox" [id]="['btn.botStepState-'+i]" [(ngModel)]="btn.botStepState" name="btn.botStepState-{{i}}" (change)="changeHandler($event)" class="cbx hidden" />
- привязка свойств, т.е.
[]
требуется []
для оценки значений
- привязка к модели, т.е.
[()]
не требуется ничего особенного
- Интерполяция, т.е.
{{}}
может использоваться с общими атрибутами
- Связывание событий, т.е.
()
отлично справляется с функциями
Ответ 5
У меня есть пример того, как сделать ваши маршруты динамичными
в вашем компоненте 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>
в твоем компоненте тс
public dataPermiso:any[] = [];
constructor(private loginserv: LoginService) {
this.loadPermiso();
}
ngOnInit() {
}
public loadPermiso(){
this.loginserv.listPermisos(this.dataStorage.idrol).subscribe((data)=>{
this.dataPermiso= data;
});
}