根据我的理解,Angular中没有办法在双向数据绑定上使用管道。基本上,我想做的是:
<input name="humidity" [(ngModel)]="humidity | percent">
来自.NET WPF编程的背景我以前能够做到 以两种方式(从模型到UI,从UI到...)转换数据 使用value converters。
如果我改为将代码更改为:
<input name="humidity" [ngModel]="humidity | percent" (ngModelChange)="humidityChanged($event)" >
...在将数据存储到模型之前,我能够手动在代码中进行向后的“管道转换”。请使用此方法查看my Plunker for full code sample。
我的问题是:
目前或即将推出的方法是否更好? Angular的版本?
如果我希望反向管道转换可以重复使用(在...中)
与百分比管道可重复使用的方式相同),这是一种好方法
创建一个包含<input>
的PercentComponent以及。{
需要代码?
答案 0 :(得分:1)
Angular不支持数据转换器(即双向管道),并且没有任何未来支持的迹象。
您可以创建包含转换逻辑(transform(..)
和transformBack(..)
)的自定义可重用类。尽管如此,您仍需要扩展您的模型,例如在您想要使用它的任何地方使用新属性。
角度管道是AngularJS过滤器的直接对应物,并假设转换视图数据。它们是单向的,是Angular传播的单向数据流的一部分。
如果要在视图和模型中更改某个值,则应仅在模型中更改,然后它将在视图中自动更新。这包括模型作为单一事实来源的角色。
humidity | percent
应该在值应该以百分比显示在视图中但在模型中保持为数字时使用。
例如,这与Aurelia有所不同,它与Angular有很多想法,但有值转换器而不是管道,它们(顾名思义)能够在两个方向上转换值。