3

我的模板中有这一行:

<span>{{ data.things.find(r => { return r.id == 5 }).description }}</span>

当我运行它时,我收到以下错误:

Parser Error: Bindings cannot contain assignments at column...

这是否意味着您不能array.find在绑定中使用?

我知道我的对象有值,并且表达式在监视窗口中计算。有什么建议么?

编辑:虽然这个问题及其答案可以解决这个问题,但我不认为它们是重复的。该问题特定于过滤到较小的列表,也许是一条记录,因为我的问题是每次都获得一条记录。@Thierry-Templier 的答案在这方面看起来不错,我喜欢它使 html 变得多么干净。

4

2 回答 2

6

您还可以实现自定义管道:

@Pipe({
  name: 'filterBy'
})
export class FilterPipe {
  transform(value: [], args: string[]) : any {
    let fieldName = args[0];
    let fieldValue = args[1];
    return value.filter((e) => {
      return (e[fieldName] == fieldValue);
    });
  }
}

并以这种方式使用它:

@Component({
  selector: 'my-app',
  template: `
    <span>{{(data.thing | filterBy:'id':'5') | json}}</span>
  `,
  pipes: [ FilterPipe ]
})
export class AppComponent {
  constructor() {
    this.data = {
      thing: [
        {
          id: 4,
          description: 'desc1'
        },
        {
          id: 5,
          description: 'desc3'
        }
      ]
    }
  }
}

请参阅此 plunkr:https ://plnkr.co/edit/D2xSiF?p=preview 。

于 2016-03-14T11:58:44.683 回答
1

如果您使用的是 Angular 2。(您没有提到您正在使用的 Angular 版本,并为两个版本添加了标签):我不知道它是否是最好的方法,但这应该可行:

角 -2

<span *ngFor="#thing of data.things">
    <span *ngIf="thing.id == 5">{{thing.description}}</span>
</span>

Angular -1:相同的逻辑,只是改变语法

于 2016-03-14T11:23:09.020 回答