diff --git a/src/directive.js b/src/directive.js index 5772d9541..77effe916 100644 --- a/src/directive.js +++ b/src/directive.js @@ -91,7 +91,11 @@ p._bind = function (def) { watcher.addCb(update) } this._watcher = watcher - this.update(watcher.value) + if (this._initValue != null) { + watcher.set(this._initValue) + } else { + this.update(watcher.value) + } } this._bound = true } diff --git a/src/directives/model/checkbox.js b/src/directives/model/checkbox.js index 2dbcfda73..450b31e4f 100644 --- a/src/directives/model/checkbox.js +++ b/src/directives/model/checkbox.js @@ -10,8 +10,7 @@ module.exports = { } _.on(el, 'change', this.listener) if (el.checked) { - // watcher is not set up yet - this.vm.$set(this.expression, el.checked) + this._initValue = el.checked } }, diff --git a/src/directives/model/radio.js b/src/directives/model/radio.js index 5059f3fe6..99e881d7f 100644 --- a/src/directives/model/radio.js +++ b/src/directives/model/radio.js @@ -10,8 +10,7 @@ module.exports = { } _.on(el, 'change', this.listener) if (el.checked) { - // watcher is not set up yet - this.vm.$set(this.expression, el.value) + this._initValue = el.value } }, diff --git a/src/directives/model/select.js b/src/directives/model/select.js index 067b641a8..e7264fcfc 100644 --- a/src/directives/model/select.js +++ b/src/directives/model/select.js @@ -124,7 +124,7 @@ function checkInitialValue () { } } if (initValue) { - this.vm.$set(this.expression, initValue) + this._initValue = initValue } } diff --git a/src/directives/model/text.js b/src/directives/model/text.js index d1d9e74b0..94aff5d12 100644 --- a/src/directives/model/text.js +++ b/src/directives/model/text.js @@ -99,8 +99,7 @@ module.exports = { el.hasAttribute('value') || (el.tagName === 'TEXTAREA' && el.value.trim()) ) { - // watcher is not set up yet - this.vm.$set(this.expression, el.value) + this._initValue = el.value } },