vue中的双向数据绑定小解
参考文档:https://www.cnblogs.com/zhuzhenwei918/p/7309604.html
前辈写的文档要看懂需要的知识太多了,对此进行一点简化让我普通的脑子看懂。
前言
什么是数据双向绑定?
vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。这也算是vue的精髓之处了。
为什么要实现数据的双向绑定?
在vue中,如果使用vuex,实际上数据还是单向的,之所以说是数据双向绑定,这是用的UI控件来说,对于我们处理表单,vue的双向数据绑定用起来就特别舒服了。
即两者并不互斥, 在全局性数据流使用单项,方便跟踪; 局部性数据流使用双向,简单易操作。
Object.defineProperty方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。 )
语法格式: Object.defineProperty(object, propertyName, attributesObject)
Object.defineProperty方法接受三个参数,依次如下。
- 属性所在的对象
- 属性名(它应该是一个字符串)
- 属性描述对象
小例子:
var obj = {
foo: 'foo'
}
Object.defineProperty(obj, 'foo', {
get: function () {
console.log('将要读取obj.foo属性');
},
set: function (newVal) {
console.log('当前值为', newVal);
}
});
obj.foo; // 将要读取obj.foo属性
obj.foo = 'name'; // 当前值为 name
二、简单的数据双向绑定实现方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>forvue</title>
</head>
<body>
<input type="text" id="textInput">
输入:<span id="textSpan"></span>
<script>
var obj = {},
//querySelector:匹配id等于textInput的第一个css元素
textInput = document.querySelector('#textInput'),
textSpan = document.querySelector('#textSpan');
Object.defineProperty(obj, 'foo', {
set: function (newValue) {
textInput.value = newValue;
textSpan.innerHTML = newValue;
}
});
textInput.addEventListener('keyup', function (e) {
obj.foo = e.target.value;
});
</script>
</body>
</html>
使用Object.defineProperty()来修改了属性的set函数,
obj.foo变成什么值,Input的value值以及span中的innerHTML也变成什么值;
然后监听input的keyup事件,修改对象的属性值,
即完成实现一个简单的数据双向绑定了。
为什么不把Input的value值以及span中的innerHTML 直接等于 e.target.value ?

浙公网安备 33010602011771号