watch的bug
Closed this issue · 9 comments
demo示例:
https://codepen.io/henryzp/pen/JRGbbm
当一开始就对c做改变,它会触发所有的$watch的函数,然后导致第一次改它的值,死活不行。之后就正常了。
开始的时候想过,自动聚焦某个model,但不行。一定要某个model变化之后,才ok
现在测试就提了这个bug,请问有什么方法解决吗? @leeluolee @fengzilong
这个需求是计算的值可以修改。
这个不是Bug, 因为watch之后并不会 直接进行检查,(初始是undefined) 而是等下一次digest 阶段, 检查会发现a,b的值是1,2 就触发了watch。你最好放到config之中,因为在config之后会进行一次自动的digest.
而不是扔组件外面去操作数据
@leeluolee ,这样是可以。。但是有一个矛盾点。
比如说c是取决于a+b,c可以修改,将c随意修改成一个值,点击保存,从数据据拉到的值是随意修改的值。但重新渲染时,c并不是用户之前填写的值了,而是a+b的值。
这样一来,无法做区分了,所以我之前的考虑才是那样的,请问有什么好的方案不?
@henryzp 计算结果可修改是什么意思?c有两个变化来源,一个是a和b的变化,另一个是用户输入,你的要求是一旦用户输入,c就和a+b无关了么?
其实官方api就那么几个,如果你都过了一遍,那么能不能拿regular实现某个功能,其实自己心里有数的,最多就是代码写得不优雅些而已
@fengzilong ,是的。。然后当a、b改变时,c又会去做一次计算
其实主要是我说的那个问题,如果能不出现这种情况的话,就OK了。。(因为我用vue测试过,它是不会的,可能两个在写法上有区别吧)
vue基于Object.defineProperty做的,我们是脏检查,本来就表现不一定一致,还有你上面的例子我确实不太清楚你要做什么,你只watch了a和b, 发生改变的时候修改c,这没问题,你修改了c,但你没有去fix它们三者的关系吧? 这是你自己逻辑的缺陷。
@leeluolee ,c是最终者,就是它的值会受制于a或者c,但它本身是可以修改的。。这个业务逻辑就是这样。我新开了一个issue,里面描述的比较清楚。 #121