vue指令
v-if : 是将元素从DOM树上移除
v-show : 是将元素 display:none
说明理解 : 官方上, v-if 会更耗浏览器性能些,其实在实际开发中,可以忽略不计.除非有大量的图片需要重新渲染.影响性能的主要往服务端出发考虑.
v-for
说明理解 : 当 vue 需要渲染一大堆元素时,它会先对模板进行解析形成一个虚拟DOM树,再形成真实元素,当数据发生更新时,那怎样做效率才高? vue 通过diff算法,以key为标识对新旧DOM进行对比更新.
v-model
说明理解 : 可以是表单的数据双向绑定,也可用于父子组件的相互传值,如果定义的属性与方法不是value和input,此时需要在子组件内重新定义model
--- 父组件中 ---
<Son:value=num @input="num=$event"></Son>
--- 此时可以简写成
<Son v-model="num">
data(){
return{
num:1
}
}
--- 子组件中 ---
props{
value:{
type:Number,
required:true,
}
},
methods:{
btnClick(){
this.$emit('input',33)
}
}
v-text与v-html
说明理解 : 更新DOM元素的innerText/innerHTML,区别就是是否会将标签进行解析显示
v-bind
说明理解 : 给标签属性设置 vue 变量的值
动态类名
说明理解 : 给标签 class 属性动态赋值 :class="{类名:布尔值}"
自定义指令
[全局自定义指令]
v-on:keyup.enter="()=>{}"
v-指令名:属性名.修饰符="值"
Vue.directive('自定义指令名称',指令生命周期)
--- bind:绑定时. 自定义指令绑定于相应DOM元素时执行(类似于vue生命周期的beforeMount)
bind(dom,obj,vnode){
dom:指令所在dom
obj:{
属性名
修饰符
值
}
vnode:虚拟dom节点信息
context:能获取指令所在组件的实例对象
}
--- inserted:渲染时. 指令所在DOM元素添加到父节点时执行(类似于vue生命周期的mounted)
inserted(dom,obj,vnode){}
--- update:更新时. 指令所在组件有更新时执行,不保证更新完成,不保证该更新和当前指令所在dom有关
--- componentUpdated:更新完成时. 指令所在组件更新完成(类似于vue生命周期的updated)
--- unbind:解除绑定. (类似于vue生命周期的beforeDestroy)
[局部自定义指令]
directives(){
指令名:{
bind,
inserted,
update,
componentUpdated,
unbind
}
}
组件传值
[父子传值]
注意:组件传值是单向数据流即栈不可修改,堆随便改,基本数据类型不可修改,复杂数据类型,只要不修改它的引用地址(栈),它的值随便修改
--- 父传子
传 子组件内 :属性名=值
收 props:{
属性名:{
type:类型,多种类型[Object,Array,String],
default:基本数据类型,直接写;复杂数据类型:()=>{return 复杂数据类型}
required:true, // 必填
validator:(value)=>{
return boolean值
true:验证通过
false:验证失败
}
}
--- 子传父(子触发父的方法)
绑定:子组件标签 @子组件方法名="父组件方法"
触发:子组件内触发:this.$emit('子组件方法名',参数值)
[兄弟组件传值]
注意:bus的监听会累加,bus的监听不使用时要销毁,beforeDestroy销毁处理
1:Vue.prototype.$bus=new Vue()
2:监听:this.$bus.$on('方法名',(参数值)=>{...})
3:触发:this.$bus.$emit('方法名',实参值)
4:销毁:this.$bus.$off('方法名')
[.sync修饰符]
1.子组件标签: :属性名="父组件属性" @uapate:属性名="父组件属性=$event"
2.子组件标签: :属性名.sync="父组件属性"
3.子组件内:props:['属性名'];触发:this.$emit('update:属性名',实参值)
[ref传值]
ref除了可以获取DOM元素外, 还可以通过this.$refs.组件标签名 获取组件的实例对象, 以及 this.$parent 获取到父组件实例对象(最近的父级组件)
[$attrs与$listeners组件传值]
1.非props属性: 父组件传入子组件属性,但子组件没有接收称为非props属性,非props属性默认会加到子组件标签最外层
(inheritAttrs:true,如果是false就不放到标签最外层显示)
2.所有的非props属性都可以通过$attrs收到
应用: v-bind="$attrs",将所有的非props属性绑定到相应标签,也可以用于组件
3.所有组件上的方法绑定子组件都可以通过$listeners接收
应用: v-on="$listeners"将所有的方法又绑定到组件相应标签,也可以用于组件