Подтвердить что ты не робот

Динамическое значение 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>
4b9b3361

Ответ 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;
    });
  }