Vue初探
MVVM模型
- M:模型(Model) :对应 data 中的数据
- V:视图(View) :模板(理解为html页面)
- VM:视图模型(ViewModel) : Vue 实例对象
数据驱动视图:
如上图所示ViewModel充当着监控者的角色,监控到了mode数据发生变化,便会通知view试图进行更新,这个过程并不需要参与其中
插值语法
{{ }}可以插入表达式
不能放if,不会产生值,可以放三元表达式
vm实例中data里的属性都可以通过Vue实例vm调用
事件处理
鼠标事件
v-on: 可替换为@
<a @click.prevent="show" href='url'/> // 默认给show传event参数:代表这次触发的事件
事件修饰符:
.stop
阻止事件冒泡,从此元素开始不往上冒了.once
事件只触发一次.prevent
阻止默认事件
键盘事件
<input type='text' @keydown="show($event,666)"/> // 传俩参
...... // 自定义的函数必须写在vue配置中的methods配置中,交给vue管理
show($event,x) { // 要传别的参数时,必须加个$event形参作为占位符
console.log($event.key); // 键名
console.log($event.keyCode);// 键码
console.log($event.target) // 触发事件的元素
}
事件修饰符:
@keyup.enter
.delete // 具体到特定的键才会触发事件
.esc.tab // 可链式调用
.space
.up .down .left .right
数据绑定
单向绑定
v-bind:可缩写为 :
<a :href='baidu.com'>
双向绑定
v-model:value 缩写 v-model
<input id='root' type='text' v-model='name'>
<script>
new Vue({
el:'#root',
data:{
name:'lisi' // 改变输入框里的值,这里的name也会变
}
})
</script>
修饰符:
对于输入元素,默认的行为方式是一旦有数据变化,马上进行绑定。
v-model.lazy // 相当于监听change操作,只有在失去焦点的时候,才会进行数据绑定
.nuber // v-model默认是string类型,确保获取到的是数字类型
.trim // 去掉数据前后的空白再同步
计算属性
对于任何复杂逻辑,都应当使用计算属性
methods和computed区别:
-
computed 是基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。
-
而使用 methods ,在重新渲染的时候,函数总会重新调用执行。
<div id="root">
<p> message: "{{ message }}"</p>
<p>Computed message: "{{ msg }}"</p> // 切片
</div> // msg为回调函数return的值
new Vue({
el:'#root',
data:{
message:'hello'
},
computed:{
msg:function() { // 可简写msg(){...}(不考虑set)
return this.message.slice(0,3)
} // this指向vm实例
}
})
监视属性
初始化Vue时设置监听
new Vue({
data:{
num:{
a:0, // num中的a或b发生变化时,watch默认监视不到
b:0,
}
},
watch:{
num:{
immediate:true, // 初始化时调用一下handler
deep:true, // 深度监视:watch监视num内部值的改变
handler:function(new,old) { // 发生变化时执行的回调函数
console.log(监视执行,new,old)
} // 参数为变化前后的值(必须监视到具体变化的对象)
}
},
})
简写:只需要调用handler,不能设置监视配置
watch:{
num(new,old) { // 函数名为监视对象,函数体为回调执行体
console.log(监视执行)
}
}
api设置监听
vm.$watch(监视对象,监视配置)
vm.$watch('num',{
deep:true,
handler:function(){...}
})
简写:简写:只需要调用handler,不能设置监视配置
vm.$watch('num',function() { // 不能写成箭头函数
// 回调方法体
})