Data binding 如何根据表达式的计算结果在两个布尔属性之间切换

Data binding 如何根据表达式的计算结果在两个布尔属性之间切换,data-binding,angular,ionic2,Data Binding,Angular,Ionic2,我有一个非常类似的问题: 但是,我希望在两个布尔属性之间切换,而不是添加/删除单个布尔属性 目前,我实现了以下目标: <ion-icon name="checkmark-circle" item-left [attr.dark]="item.isComplete ? true : null" [attr.light]="item.isComplete ? null : true" (click)="toggleToDoItemCompleteStatus(item, i)"><

我有一个非常类似的问题:

但是,我希望在两个布尔属性之间切换,而不是添加/删除单个布尔属性

目前,我实现了以下目标:

<ion-icon name="checkmark-circle" item-left [attr.dark]="item.isComplete ? true : null" [attr.light]="item.isComplete ? null : true"  (click)="toggleToDoItemCompleteStatus(item, i)"></ion-icon>


还有更优雅的方式吗?

我认为使用管道是一种改进:

@Pipe({name:'boolAttr'})
导出类BoolAttrPipe{
变换(val){
返回true | | null;
}
}
您可以使管道全局可用,这样就不必将其添加到要使用它的每个组件上的
管道:[……]

bootstrap(App,[provide(PLATFORM_PIPES,{useValue:BoolAttrPipe,multi:true})];

切换ToDoItemCompleteTastus做什么?它获取作为参数传入的索引,并设置toDoitems[Indexthatwaspassedin]。isComplete=!toDoitems[Index hathathat PassedIn]。已完成。默认情况下为false。索引从何而来?父标记是离子列表,其中包含ngFor=“let item of toDoitems;#i=index”我可能不需要传递索引,只需传递该项即可。但不管怎样,我的问题是关于设置属性的亮(当项目完成状态为false时)和暗(当项目完成状态为true时),谢谢,但a已经这样做了。唯一的区别是我在ToggletoDoitemCompleteTastus函数中提取了click事件代码。我要问的是“…[attr.dark]=”item.isComplete?true:null“[attr.light]=”item.isComplete?空:是的。我觉得它很难看,我在问是否有更好的方式来写这个。谢谢。这绝对是一个进步。