1.数据绑定:
Vue中有2种数据绑定的方式
1.单向绑定v-bind数据只能从 data 流向页面
2.双向绑定v-model数据不仅能从 data 流向页面,还可以从页面流向 data
备注:
1.双向绑定一般都应用在表单类元素上,如 <input><select><textarea>等
2.v-model:value可以简写为v-model,因为v-model默认收集的就是value值
<div id="root">
<!-- 普通写法 -->
<!-- 单向数据绑定:<input type="text" v-bind:value="name"><br/> -->
<!-- 双向数据绑定:<input type="text" v-model:value="name"><br/> -->
<!-- 简写 -->
单向数据绑定:<input type="text" :value="name"><br/>
双向数据绑定:<input type="text" v-model="name"><br/>
<!-- 如下代码是错误的,因为 v-model 只能应用在表单类元素(输入类元素)上 -->
<!-- <h2 v-model:x="name">你好啊</h2> -->
</div>
2.MVVM模型 数据代理:
1.MVVM模型:
M:模型 Model,data中的数据
V:视图 View,模板代码
VM:视图模型 ViewModel,Vue实例
观察发现:
1.data中所有的属性,最后都出现在了vm身上
2.vm身上所有的属性 及Vue原型身上所有的属性,在 Vue模板中都可以直接使用
<div id="root">
<h2>名称:{{ name }}</h2>
<h2>战队:{{ rank }}</h2>
<h2>测试:{{ $options }}</h2>
</div>
<script>
Vue.config.productionTip = false
new Vue({
el: '#root',
data: {
name: 'uzi',
rank: 'RNG'
}
})
</script>
2.Vue 中的数据代理:
数据代理:通过一个对象代理对另一个对象中属性的操作
Object.defineproperty方法:
let number = 18
let person = {
name: '张三',
sex: '男',
}
Object.defineProperty(person, 'age', {
// value:18,
// enumerable:true, // 控制属性是否可以枚举,默认值是false
// writable:true, // 控制属性是否可以被修改,默认值是false
// configurable:true // 控制属性是否可以被删除,默认值是false
// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get() {
console.log('有人读取age属性了')
return number
},
// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
set(value) {
console.log('有人修改了age属性,且值是', value)
number = value
}
})
// console.log(Object.keys(person))
console.log(person)
1.Vue中的数据代理通过vm对象来代理data对象中属性的操作(读/写)
2.Vue中数据代理的好处:更加方便的操作data中的数据
3.基本原理
a.通过object.defineProperty()把data对象中所有属性添加到vm上
b.为每一个添加到vm上的属性,都指定一个 gettersetter
c.在gettersetter内部去操作(读/写)data中对应的属性
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Vue中的数据代理</title>
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root">
<h2>学校名称:{{ name }}</h2>
<h2>学校地址:{{ address }}</h2>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
const vm = new Vue({
el: '#root',
data: {
name: '江西信息应用职业技术学院',
address: '南昌'
}
})
</script>
</body>
</html>