我对管道有疑问:想象有一个管道应用于反应形式的字段
[value]="form.get(formControlName).value | pipeName”
第一次将值设置为表单字段时,它可以正常工作。现在,有一个过程正在将模型与表单值同步。如果表单字段重置为与以前相同的值,则不会调用该管道。
您可能会说-只是不要再次为表单设置相同的值,这是正确的。由于某些限制,很难不这样做,因此我们需要找到解决方案。
例如:如果视图的值为'112',则管道会将值转换为'11 2/4'当我执行this.form.get(formControlName).setValue(‘112’)
时,不应用管道转换,其值保持为'112'
此调用管道将不会执行,并且字段值将保留为原始值,并且不会通过管道逻辑进行转换。
这有意义吗?
[更新#1]
[尝试使管道不纯后,实际上使它使用相同的输入参数进行了调用,但是管道转换的结果未应用回模板。
[更新#2]
编辑了我要达到的目的的解释。
这很奇怪,因为您应该将表单控件绑定到输入,而不是将表单控件值绑定到输入值:
<input [formControl]="form.get(formControlName)" >
这将使您的输入值与表单控件保持同步,因此,在使用反应式表单时,永远不要绑定到值。
如果您确实出于某种原因希望它起作用,请改为执行此操作:
[value]="form.get(formControlName).valueChanges | async | pipeName”
将其作为值流进行处理,并进行异步订阅,将结果馈送到管道中
我认为是因为您没有更新表单值。更改值后,请尝试以下操作。
this.form.get(formControlName).setValue(‘112’)
this.form.updateValueAndValidity();
您应该使管道不纯为https://angular.io/guide/pipes#impure-pipes状态
Angular在每个组件更改检测周期内执行不纯管道
只需在管道装饰器中将属性pure
设置为false