Пользовательский канал в 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}}