Пользовательский канал в templateUrl

Я создал собственную трубу.

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

@Component({
  selector: 'app-summary',
  templateUrl: './summary.component.html',
  styleUrls: ['./summary.component.css']
})

@Pipe({
    name:'summary'
})
export class SummaryComponent implements PipeTransform {

  transform(value:string,args?:any) {
   // details
}

В моем app.component.html. я имею

 <app-summary></app-summary>  

И в моем резюме.component.html у меня есть

<input type="text" [(ngModel)]="title" >
<br>
{{title}}

Я хочу использовать трубу в {{title}}, Но похоже, что труба не применяется. Чего мне не хватает?

РЕДАКТИРОВАТЬ: я добавил детали кода трубы.

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

@Component({
   selector: 'app-summary',
   templateUrl: './summary.component.html',
   styleUrls: ['./summary.component.css']
})

@Pipe({
    name:'summary'
})
export class SummaryComponent implements PipeTransform {

  transform(value:string,args?:any) {
       if(!value)
          return null;
          let prep = ['of','the'];
       let splitted = value.split(' '); 

       for(var i=0;i<splitted.length;i++){
           if(i>0 && prep.includes(splitted[i].toLowerCase()))
              splitted[i]=splitted[i].toLowerCase();
           else
           {
            splitted[i]= splitted[i].substring(0,1).toUpperCase()+splitted[i].substring(1).toLowerCase();
           }
       }
       return splitted.join(' ');
  }
}

3 ответа

Решение

Это правильный способ реализации трубы:

summary.pipe.ts

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

@Pipe({
    name:'summary'
})
export class SummaryPipe implements PipeTransform {

  transform(value:string,args?:any) {
    // details
  }
}

summary.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-summary',
  templateUrl: './summary.component.html',
  styleUrls: ['./summary.component.css']
})
export class SummaryComponent {

}

Тогда вы можете использовать трубу в вашем представлении следующим образом:

<input type="text" [(ngModel)]="title" >
<br>
{{title | summary }}

Не забудьте добавить SummaryPipe в модуле NgModule, в котором вы хотите его использовать:

@NgModule({
  declarations: [
    SummaryComponent,
    SummaryPipe
  ],
  providers: [...]
})
export class SummaryModule { }

Изменить это:

<input type="text" [(ngModel)]="title" >
<br>
{{title}}

К этому:

<input type="text" [(ngModel)]="title" >
<br>
{{title | summary}}

Вы на самом деле не применили summary труба при рендеринге title,

Вам нужно сообщить angular, что вы хотите использовать эту трубу, как показано ниже:

{{title | summary}}
Другие вопросы по тегам