Est-il possible dans Angular 2 d'appliquer un tuyau sous condition? J'aimerais faire quelque chose comme:
{{ variable.text | (variable.value ? SomePipe : OtherPipe) }}
Si non, quel est le moyen préféré pour obtenir cet effet?
Vous devez changer un peu la syntaxe:
{{variable.value ? (variable.text | SomePipe) : (variable.text | pipe2)}}
Comme une telle syntaxe n'est pas prise en charge, je pense que le seul moyen de le faire est d'implémenter un autre canal pour gérer la condition:
@Pipe({
name: 'condition'
})
export class ConditionPipe {
transform(val,conditions) {
let condition = conditions[0];
let conditionValue = conditions[1];
if (condition===conditionValue) {
return new Pipe1().transform(val);
} else {
return new Pipe2().transform(val);
}
}
}
Et utilisez-le de cette façon:
@Component({
selector: 'app'
template: `
<div>
{{val | condition:cond:1}}<br/>
</div>
`,
pipes: [ Pipe1, Pipe2, ConditionPipe ]
})
export class App {
val:string = 'test';
cond:number = 1;
}
Voir ceci plunkr: https://plnkr.co/edit/KPIA5ly515xZk4QZx4lp?p=preview .
Vous pouvez aussi utiliser ngIf
<span *ngIf="variable.value; else elseBlock">{{ variable.text | SomePipe }}</span>
<ng-template #elseBlock>{{ variable.text | OtherPipe }}</ng-template>
Je trouve cela utile au cas où la ligne deviendrait trop longue.