Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在反应性窗体字段上应用管道的“热”_Angular_Angular Pipe - Fatal编程技术网

Angular 在反应性窗体字段上应用管道的“热”

Angular 在反应性窗体字段上应用管道的“热”,angular,angular-pipe,Angular,Angular Pipe,我有一个关于管道的问题: 假设有一个管道应用于反应形式的领域 [value]="form.get(formControlName).value | pipeName” 第一次将值设置到表单字段时,它工作正常。现在,有一个进程正在将模型与表单值同步。如果表单字段被重置为与以前相同的值,则不会调用管道 您可能会说-只是不要再次为表单设置相同的值,这样做是正确的。由于一些限制,很难不这样做,因此我们需要找到一个解决方案 例如:如果视图的值为“112”,则管道会将该值转换为“11 2/4” 当我执行t

我有一个关于管道的问题: 假设有一个管道应用于反应形式的领域

[value]="form.get(formControlName).value | pipeName”
第一次将值设置到表单字段时,它工作正常。现在,有一个进程正在将模型与表单值同步。如果表单字段被重置为与以前相同的值,则不会调用管道

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

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

在此之后,将不会执行调用管道,字段值将保持原始状态,并且不会被管道逻辑转换

这有意义吗

[更新#1]

在尝试使管道不纯后,它实际上使用相同的输入参数调用它,但管道转换的结果不会应用回模板

[更新#2]


编辑了我试图实现的解释。

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

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

this.form.updateValueAndValidity();

你应该像这里说的那样把管子弄脏

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


只需在管道装饰器中将属性
pure
设置为
false
,这样做很奇怪,因为您应该将表单控件绑定到输入,而不是将表单控件值绑定到输入值:

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

将其视为一个值流,并使用异步订阅,将结果馈送到管道中

我认为这是预期的行为,因为管道最关键的好处之一是缓存值,避免不必要地运行代码。你的烟斗不干净吗?你在做过滤和排序之类的事情吗?如果它是一个纯管道(通常应该是这样),那么它总是返回相同的值,对吗?您可以将管道设置为
不纯净:false
,它将在每次接收输入时运行。是的,管道是不纯净的,但这与点无关。考虑这个例子。假设字段值有一个值“a”,管道将其转换为笑脸:)。但下一次表单字段值设置为相同的“a”时,笑脸将消失-显示原始值“a”。这就是问题所在。因此您正在尝试使用
value
而不是使用
setValue()
更新被动表单元素的值?在同一输入元素上是否同时有
value
formControlName
(来自FormBuilder/FormGroup/FormControl)?是的,我有'value'和'formControlName'。不确定这是否是正确的方法。这没有帮助。那么,将管道应用于被动表单字段值的正确方法是什么?使用所需的值设置该值,或者编写实现控制值访问器的指令以格式化该值。请检查问题的编辑版本。此外,您建议在[value]中设置管道的方式也没有什么区别。您需要更详细地说明您的实际目标是什么/您试图实现什么以及为什么要这样设置
[value]="form.get(formControlName).valueChanges | async | pipeName”