<div id="app"> <input type="text" v-model="val" /> <span>{{val}}</span> </div> <script type="text/javascript"> var vm = new Vue({ el : "#app", computed : { "val" : function() { return "123"; } } }); console.log(vm.val); vm.$val = "11111"; </script>
分析:不出来的原因是因为只有get没有set
解决办法1:
加入data,因为data里面有劫持方法本身带有get和set方法,因为vue是通过Object.defineProperty()来实现数据劫持的。
data: function() {
return {
inputValue: '123' } }, computed : { spanValue : function() { return this.inputValue + '.00'; } }
解决方法2:
computed: {
_foo: {
set: function(value) {
this.foo = value; }, get: function() { return this.foo } } }
原理:
var Book = {}
var name = '';
Object.defineProperty(Book, 'name', {
set: function (value) {
name = value;
console.log('你取了一个书名叫做' + value);
},
get: function () {
return '《' + name + '》'
}
})
Book.name = 'vue权威指南'; // 你取了一个书名叫做vue权威指南
console.log(Book.name); // 《vue权威指南》