如何制作可重复使用的双向管道?

时间:2017-08-15 14:09:00

标签: angular

根据我的理解,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

我的问题是:

  1. 目前或即将推出的方法是否更好? Angular的版本?

  2. 如果我希望反向管道转换可以重复使用(在...中) 与百分比管道可重复使用的方式相同),这是一种好方法 创建一个包含<input>的PercentComponent以及。{ 需要代码?

1 个答案:

答案 0 :(得分:1)

Angular不支持数据转换器(即双向管道),并且没有任何未来支持的迹象。

您可以创建包含转换逻辑(transform(..)transformBack(..))的自定义可重用类。尽管如此,您仍需要扩展您的模型,例如在您想要使用它的任何地方使用新属性。

角度管道是AngularJS过滤器的直接对应物,并假设转换视图数据。它们是单向的,是Angular传播的单向数据流的一部分。

如果要在视图和模型中更改某个值,则应仅在模型中更改,然后它将在视图中自动更新。这包括模型作为单一事实来源的角色。

humidity | percent应该在值应该以百分比显示在视图中但在模型中保持为数字时使用。

例如,这与Aurelia有所不同,它与Angular有很多想法,但有值转换器而不是管道,它们(顾名思义)能够在两个方向上转换值。