官方的回复就是属性改变会整体元素render
,并不是setAttribute
看来只能自己规避, 感谢各位的回答, 给+1
官方回复
大概猜到了, 是不是属性的变化引起了render, vue内部render的逻辑会重新读取props上的value进行重新渲染, 所以就出现了下面的情况. 请看过的vue源码的大神给与回复确认, 3q.
请问这是不是vue的bug?
浏览器: mac谷歌68
vue: 2.5.16 && 2.5.17
代码:
<div id="app">
<input :warning="hasWarning" :value="text" @keydown="keydown" />
</div>
new Vue({
el: "#app",
data: {
text: 'vue',
hasWarning: false
},
methods: {
keydown() {
if (1 == 1) {
this.hasWarning = true;
}
this.hasWarning = false;
}
}
})
你直接用
:value="text"
相当于单向绑定了, 每次 vue 重新 render 都会使 input 的重置为 text 的值, 也就是 'vue', 你的 keydown 里面对 hasWarning 进行了赋值操作, 这会触发 render, 所以 input 的值会变为 'vue'. 这点从你的第一个演示中也可以很好的理解, 你每隔一秒改一次 num, 触发一次 render, 所以 input 的值每隔1秒都会再次重置为 vue.