这是我参与【第四届青训营】笔记创作活动的第一天。
Vue模板语法有2大类
1.插值语法:
功能:用于解析标签体内容。
写法:{{XXX}},xxx是js表达式,且可以直接读取到data中的所有属性
2.指令语法:
功能:用于解析标签(包括:标签属性、标签体内容、绑定事件。。。
举例:v-bind:href=“xxx”或简写为:href=“xxx”,xxx同样要写js表达式
且可以直接读取到data中的所有属性
备注:Vue中有很多的指令,且形式都是:v-???,在这仅仅是拿Vue举个例
<a v-bind:href="url" x="hello">点我去尚硅谷学习1</a>
<a :href="url" x="hello">点我去尚硅谷学习2</a>
03_数据绑定
Vue中有2种数据绑定的方式:
1.单向绑定(v-bind):
数据只能从data流向页面
2.双向绑定(v-model):
数据不仅能从data流向页面,还可以从页面流向data
备注:
2.双向绑定一般都应用在表单类元素上(如:input selec等) (如果应用在其他元素上会报错)
2.v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值
单向数据绑定:<input type="text" v-bind:value="name"><br/>
双向数据绑定:<input type="text" v-model:value="name">
:model 和 v-model 的区别
1.v-model:通常用于表单上的双向数据绑定,如果除了表单其他组件使用时,起不到任何效果。它可以实现子组件到父组件的双向数据动态绑定。
2.:model
:model 是 v-bind:model 的缩写
只是将父组件的值传递给和子组件,但是并未实现子组件和父组件之间的双向数据绑定,当然引用数据类型除外,子组件改变了引用数据类型的数据的话,父组件的数据也会跟着改变。
04_MVVM模型
MVVM模型
1.M:模型(Model):data中的数据
2.V:试图(View):模板代码
3.VM:试图模型(ViewModel):Vue实例
观察发现:
1.data中所有的属性,最后都出现在了vm身上
2.vm身上所有的属性 及 Vue 原型上所有的属性 ,在Vue模板中都可以直接使用
<div id="root">
<h1>学校名称:{{name}}</h1>
<h1>学校地址:{{name}}</h1>
<h1>测试一下1:{{1+1}}</h1>
<h1>测试一下2:{{$options}}</h1>
<h1>测试3:{{$emit}}</h1>
<h1>测试4:{{_c}}</h1>
</div>
05_数据处理
Object.defineProperty方法
给某个属性添加属性或方法,是不可枚举类型,不可遍历(无法通过Object.key(对象名),读取到),如果想要被遍历到,需要添加enumerable:true
<script type="text/javascript">
let number = 18;
let person = {
name: '张三',
sex: '男',
// age:18//这里的age是可以直接修改的
}
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)就会被调用,且会收到修改的具体值
ser(value) {
console.log('有人修改了age属性,且值是', value)
number = value;
}
})
</script>
数据代理
<!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写) -->
<script type="text.javascript">
ler obj = {x:100}
let obj2 = {y:200}
Object.defineProperty(obj2,'2',{
get(){
return obj.x;
}
ser(value){
obj.x = value;
}
})
</script>