Angular 2 管道状况良好
Angular 2 Pipe under condition
在Angular 2 条件下可以应用管道吗?
我想做类似的事情:
{{ variable.text | (variable.value ? SomePipe : OtherPipe) }}
如果不是,实现此效果的首选方法是什么?
由于不支持这种语法,我认为唯一的方法是实现另一个管道来处理这种情况:
@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);
}
}
}
并这样使用:
@Component({
selector: 'app'
template: `
<div>
{{val | condition:cond:1}}<br/>
</div>
`,
pipes: [ Pipe1, Pipe2, ConditionPipe ]
})
export class App {
val:string = 'test';
cond:number = 1;
}
看到这个 plunkr:https://plnkr.co/edit/KPIA5ly515xZk4QZx4lp?p=preview。
您需要稍微更改一下语法:
{{variable.value ? (variable.text | SomePipe) : (variable.text | pipe2)}}
您也可以使用 ngIf
<ng-container *ngIf="variable.value; else elseBlock">{{ variable.text | SomePipe }}</ng-container>
<ng-template #elseBlock>{{ variable.text | OtherPipe }}</ng-template>
我发现它在线路变得太长的情况下很有用。
正如其他人指出的那样,您可以使用 {{condition ? (value | pipe1) : (value2 | pipe2 )}}
.
的语法
但值得一提的是,管道的格式参数也可以是动态的。例如这是一个可以用高精度或低精度格式化的数字示例。条件被传递给一个方法,该方法将有条件地创建格式化程序文本。
// in template
{{ value | number:getFormat(true) }}
// in .ts
public getFormat(highPrecision = false): string {
const digits = highPrecision ? 3 : 2;
return `1.${digits}-${digits}`;
}
所以,是的,您可以在 2 个管道之间使用条件 select。但在某些情况下,您可能更喜欢(或只需要)使用带有条件格式参数的管道。.
在Angular 2 条件下可以应用管道吗? 我想做类似的事情:
{{ variable.text | (variable.value ? SomePipe : OtherPipe) }}
如果不是,实现此效果的首选方法是什么?
由于不支持这种语法,我认为唯一的方法是实现另一个管道来处理这种情况:
@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);
}
}
}
并这样使用:
@Component({
selector: 'app'
template: `
<div>
{{val | condition:cond:1}}<br/>
</div>
`,
pipes: [ Pipe1, Pipe2, ConditionPipe ]
})
export class App {
val:string = 'test';
cond:number = 1;
}
看到这个 plunkr:https://plnkr.co/edit/KPIA5ly515xZk4QZx4lp?p=preview。
您需要稍微更改一下语法:
{{variable.value ? (variable.text | SomePipe) : (variable.text | pipe2)}}
您也可以使用 ngIf
<ng-container *ngIf="variable.value; else elseBlock">{{ variable.text | SomePipe }}</ng-container>
<ng-template #elseBlock>{{ variable.text | OtherPipe }}</ng-template>
我发现它在线路变得太长的情况下很有用。
正如其他人指出的那样,您可以使用 {{condition ? (value | pipe1) : (value2 | pipe2 )}}
.
但值得一提的是,管道的格式参数也可以是动态的。例如这是一个可以用高精度或低精度格式化的数字示例。条件被传递给一个方法,该方法将有条件地创建格式化程序文本。
// in template
{{ value | number:getFormat(true) }}
// in .ts
public getFormat(highPrecision = false): string {
const digits = highPrecision ? 3 : 2;
return `1.${digits}-${digits}`;
}
所以,是的,您可以在 2 个管道之间使用条件 select。但在某些情况下,您可能更喜欢(或只需要)使用带有条件格式参数的管道。.