watch的bug(用例子说明)
Closed this issue · 7 comments
henryzp commented
比如说四个model:
<input r-model={a} />
<input r-model={b} />
<input r-model={c} />
<input r-model={d} />
c的值取决于a+b,c可以修改。
比如说a=1,b=2,c = 3,d = 4。
把c改成5,保存到服务端。
重新打开,a = 1, b = 2, c = 5, d = 4,是对的。
但是当我修改d的时候,c会变成3,因为执行了$watch的计算(准确地说,所有的$watch的function都被触发了一次),可是c的监听者不是a或者b吗?只有当a或者b改变时,c才会变。
这不是bug吗?
fengzilong commented
从脏值检查原理来看,它不会管watcher内部具体做了什么,但watcher又是变化的来源,所以必须去执行所有的watcher
拿你上面的例子来说,假如a在某处依赖了d呢,虽然你例子不是这样的,但脏值检查不会管这个,它不会去分析你每个watcher里做了什么
henryzp commented
那我这个问题,有什么建议不?
感觉regular实现不了我说的这个需求了呀
henryzp commented
@leeluolee ,业务是这样的。。我也没办法
leeluolee commented
https://codepen.io/leeluolee/pen/EgPNmp sync参数可以不触发 undefined->当前值的watcher .
Vue如果可以应该是默认sync, Regularjs默认是触发undefined->当前值,
leeluolee commented
还有Vue虽然接口层面和Regularjs有一些接近,但是数据模型和模板层面实现都是天壤之别,无论Vue1还是Vue2, 所以最好能仔细看下Regularjs本身的文档
henryzp commented
@leeluolee ,谢谢你的demo。。顺利搞定了