Можете ли вы использовать array.filter в привязке Angular?

У меня есть эта строка в моем шаблоне:

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

Когда я запустил это, я получаю следующую ошибку:

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

Означает ли это, что вы не можете использовать array.find из привязки?

Я знаю, что мои объекты имеют значения, и выражение оценивается в окне просмотра. Любые предложения?

Изменить: В то время как этот вопрос, и его ответ обойдет проблему, я не думаю, что они дубликаты. Этот вопрос специфичен для фильтрации в меньшем списке, возможно, в одной записи, где по мере того, как моя проблема получает каждую запись каждый раз. @Тьерри-Templier ответ выглядит хорошо в этом отношении, и мне нравится, насколько он чист, что делает html.

Ответ 1

Вы также можете реализовать пользовательский канал:

@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.

Ответ 2

Если вы используете angular 2. (вы не упомянули версию angular, которую используете, и добавили теги для обеих версий): Я не знаю, лучший ли это, но это должно работать:

Angular -2

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

Angular -1: та же логика, просто измените синтаксис