Угловое объявление пользовательской трубы

Я пытаюсь использовать пользовательский Pipe для фильтрации списка элементов.

// pipes/my-filter/my-filter.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'my-filter',
})
export class MyFilter implements PipeTransform {
  transform(value: string, ...args) {
    return value;
  }
}

Я хотел бы использовать его на странице Component, отображающей этот список.

// pages/mymodule-liste/mymodule-liste.html

<ion-content>
    <ion-searchbar
      placeholder="Find"
      [(ngModel)]="myInput">
    </ion-searchbar>
    <button ion-item *ngFor="let item of listItem | myFilter: myInput"">
</ion-content>

Я пытаюсь импортировать Pipe в Component

// pages/mymodule-liste/mymodule-liste.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { MyFilter } from '../../pipes/my-filter/my-filter';

@IonicPage()
@Component({
  selector: 'page-mymodule-liste',
  templateUrl: 'mymodule-liste.html',
})
export class MymoduleListePage {
  listItem: any
  constructor(
      public navCtrl: NavController,
      public navParams: NavParams,
      public myFilter: MyFilter) {
  }    
}

Но я получаю такую ​​ошибку:

Ошибка: ошибки синтаксического анализа шаблона: канал myFilter не найден

Я также пытаюсь объявить его как провайдеров в mymodule-list.module.ts или глобально в своих app.modules.ts объявлениях и провайдерах, но все равно не работает.

Я просматриваю документацию по Angular по Pipe , а также другие ответы на stackoverflow, но не могу найти способ заставить его работать.

Итак, мой вопрос: как объявить / зарегистрировать пользовательский Pipe в Angular (v4.1.0) / Ionic (v3.3.0) для использования в конкретном компоненте?


person TGrif    schedule 01.06.2017    source источник


Ответы (2)


ваше имя канала - my-filter, а не myFilter

<ion-content>
    <ion-searchbar
      placeholder="Find"
      [(ngModel)]="myInput">
    </ion-searchbar>
    <button ion-item *ngFor="let item of listItem | my-filter: myInput"">
</ion-content>
person CharanRoot    schedule 01.06.2017
comment
Было бы неплохо переименовать канал в myFilter, поскольку каналы используются внутри выражений. - person Aluan Haddad; 01.06.2017
comment
Так просто. Я чувствую себя немного глупо ... Спасибо за ответ. - person TGrif; 02.06.2017
comment
@Aluan Haddad Я думаю, что вы правы, и я пытаюсь переименовать my-filter pipe в myFilter, но получаю ошибку: канал myFilter не может быть найден. Довольно типично для Angular. - person TGrif; 19.06.2017
comment
На самом деле я просто понимаю, что это больше не способ Angular. В документации это довольно ясно, но, тем не менее, я думал, что могу просто реализовать фильтрующий канал, как он существует в первой версии. Фактически, я следую советам, которые нашел в некоторых других ответах, чтобы переместить логику в Компонент. Но все же любопытно по поводу логики именования. - person TGrif; 19.06.2017
comment
логика использования имени myFilter вместо my-filter заключается в том, что оно используется в контексте Angular выражений, используемых в шаблонах. Такие выражения шаблона, используемые между {{}} и в значениях атрибутов, похожи на JavaScript (например, n === 1 ? 'one': 'many') и должны соответствовать его соглашениям об именах. Однако сам Angular нарушает правила именования HTML, вводя чувствительный к регистру атрибут names. Все это в беспорядке. - person Aluan Haddad; 27.06.2017

Имя вашей трубы my-filter, а не myFilter.

Также проверьте, зарегистрирован ли канал в ngModule в declerations

person Rahul Singh    schedule 01.06.2017