要在反应形式字段上应用管道

问题描述 投票:0回答:3

我对管道有疑问:想象有一个管道应用于反应形式的字段

[value]="form.get(formControlName).value | pipeName”

第一次将值设置为表单字段时,它可以正常工作。现在,有一个过程正在将模型与表单值同步。如果表单字段重置为与以前相同的值,则不会调用该管道。

您可能会说-只是不要再次为表单设置相同的值,这是正确的。由于某些限制,很难不这样做,因此我们需要找到解决方案。

例如:如果视图的值为'112',则管道会将值转换为'11 2/4'当我执行this.form.get(formControlName).setValue(‘112’)时,不应用管道转换,其值保持为'112'

此调用管道将不会执行,并且字段值将保留为原始值,并且不会通过管道逻辑进行转换。

这有意义吗?

[更新#1]

[尝试使管道不纯后,实际上使它使用相同的输入参数进行了调用,但是管道转换的结果未应用回模板。

[更新#2]

编辑了我要达到的目的的解释。

angular angular-pipe
3个回答
2
投票

这很奇怪,因为您应该将表单控件绑定到输入,而不是将表单控件值绑定到输入值:

<input [formControl]="form.get(formControlName)" >

这将使您的输入值与表单控件保持同步,因此,在使用反应式表单时,永远不要绑定到值。

如果您确实出于某种原因希望它起作用,请改为执行此操作:

[value]="form.get(formControlName).valueChanges | async | pipeName”

将其作为值流进行处理,并进行异步订阅,将结果馈送到管道中


0
投票

我认为是因为您没有更新表单值。更改值后,请尝试以下操作。

this.form.get(formControlName).setValue(‘112’)

this.form.updateValueAndValidity();

0
投票

您应该使管道不纯为https://angular.io/guide/pipes#impure-pipes状态

Angular在每个组件更改检测周期内执行不纯管道

只需在管道装饰器中将属性pure设置为false

© www.soinside.com 2019 - 2024. All rights reserved.