【发布时间】:2018-07-20 17:14:38
【问题描述】:
我面临着非常奇怪的问题。为此,我准备了 stackblitz demo。
问题是什么:
- 从选择器中选择
Filter Two - 使用相同的选择器返回
Filter One - 输入
Filter One输入一些随机值,例如123 - 按
Test 1按钮。
意外的行为是输入字段被清除。看一下实现onTest1 方法是如何实现的,然后是onTest2 方法是如何实现的。当您按下Test 2 按钮时,来自Filter One 的输入将保持不变,但请查看onTest1 和onTest2 实现之间的差异。只是顺序上的不同。在test1 中,该值设置为索引 0 处的过滤器,然后null 设置为索引 1 处的过滤器。
在test2 中,null 设置为索引 1 处的过滤器,然后值设置为过滤器 0。
有人可以解释这种奇怪的行为吗?我面临着更大的问题,这只是 Stackoverflow 帮助目的的冰山。目前我正在使用 Angular 5.2.5 并且我正在使用 Google Chrome 67.0.3396.99 在 Macbook OSX 10.12.6 上进行测试。
【问题讨论】:
-
预期的行为是什么?当您在过滤器 2 上并单击测试 2 两次时,输入将被清除。
-
我不明白为什么在第 4 步之后输入字段
Filter One被清除。我为它设置了与用户提供的相同的值,所以为什么它被清除了。 -
我在两个点击处理程序中都评论了
this.filters[1].control.setValue(null);。现在它没有被清除。 :) -
嘿,我知道。为什么当我在第二个过滤器上调用
setValue(null)时它也会清除第一个过滤器?我创建了两个不同的 FormControl 实例 - 每个过滤器一个 - 那么为什么在第二个过滤器上设置空值也会清除第一个过滤器?我不明白这个。