vue的双向数据绑定v-model
vue的双向数据绑定原理是什么?
一般都会搜索到,是用Object.defineProperty( ),来监听数据get和set,来实现数据劫持的
假如对Object.defineProperty( )不是很了解,可以点击上面链接,看看其语法!
举个简单的例子:
var blog = { name: '之鹿喵博客' }; console.log(blog.name); //
之鹿喵博客
如果想要在执行console.log(blog.name)的同时,直接给之鹿喵博客加个书名号,那要怎么处理呢?或者说要通过什么监听对象 blog的属性值。这时候Object.defineProperty( )就派上用场了,代码如下:
var blog= {}
var name = '';
Object.defineProperty(blog, 'name', {
set: function (value) {
name = value;
console.log('欢迎来到' + value);
},
get: function () {
return '《' + name + '》'
}
})
blog.name = '之鹿喵博客'; // 欢迎来到之鹿喵博客
console.log(blog.name); // 《之鹿喵博客》
上面代码执行一下,可以查看效果!
关于 vue的双向数据绑定,具体如何实现的?网上也有很多实现的代码,这里就不多累赘了!
v-model 的使用
上面开了一个小差,讲了那么多,其实就是为了说明Vue 是单项数据流,v-model 只是语法糖而已。
<input v-model="haorooms" />
<input v-bind:value="haorooms" v-on:input="haorooms= $event.target.value" />
第一行的代码其实只是第二行的语法糖。然后第二行代码还能简写成这样:
<input :value="haorooms" @input="haorooms= $event.target.value" />
也就是说,
<input v-model="haorooms" />
也可以写成
<input :value="haorooms" @input="haorooms= $event.target.value" />