目录
1. ref引用
1)ref引用
2)使用ref引用DOM元素
3)使用ref引用组件实例
4)控制文本框和按钮的按需切换
5)让文本框自动获得焦点
6)this.$nextTick(cb)方法
2. 动态组件
1)动态组件
2)实现动态组件渲染
3)使用keep-alive保持状态
3. 插槽
1)插槽
2)插槽的基础用法
①没有预留插槽的内容会被丢弃
②后备内容
③具名插槽
④为具名插槽提供内容
⑤具名插槽的简写形式
3)作用域插槽
①解构作用域插槽的prop
②作用域插槽的应用场景
4. 自定义指令
1)自定义指令
2)声明私有自定义指令的语法
3)声明全局自定义指令的语法
4)updated函数
5)函数简写
6)指令的参数值
1. ref引用
ref用来辅助开发者在不依赖于jQuery的情况下,获取DOM元素或组件的引用。
每个vue的组件实例上,都包含一个$refs对象,里面存储着对应的DOM元素或组件的引用。默认情况下,组件的$refs指向一个空对象。
结果为:
使用ref引用页面上的DOM元素,可以按照如下的方式进行操作:
结果为:
通过布尔值inputVisible来控制组件中的文本框与按钮的按需切换。
当文本框展示出来之后,如果希望它立即获得焦点,则可以为其添加ref引用,并调用原生DOM元素的.focus()方法即可。
组件的$nextTick(cb)方法会把cb回调推迟到下一个DOM更新周期之后执行。
等组件的DOM元素异步地重新渲染完成后,再执行cb回调函数,从而能保证cb回调函数可以操作到最新的DOM元素。
2. 动态组件
动态组件指的是动态切换组件的显示与隐藏。vue提供了一个内置的
App根组件
data() {
return {
comName: MyHome
}
},
components: {
MyHome,
MyMovie
}
默认情况下,切换动态组件时无法保持组件的状态,此时可以使用vue内置的
3. 插槽
插槽(slot)是vue为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。
可以把插槽认为是组件封装期间,为用户预留的内容的占位符。
在封装组件时,可以通过
结果为:
如果在封装组件时没有预留任何
封装组件时,可以为预留的
结果为:
如果在封装组件时需要预留多个插槽节点,则需要为每个
如果没有指定name名称的插槽,会有隐含的名称:default。
在向具名插槽提供内容的时候,可以在元素上使用v-slot指令,并以v-slot的参数的形式提供其名称。
滕王阁序
豫章故郡,洪都新府。
星分翼轸,地接衡庐
襟三江而带五湖,控蛮荆而引瓯越。
落款:王勃
结果为:
把参数之前的所有内容(v-slot:)替换为字符#。
滕王阁序
豫章故郡,洪都新府。
星分翼轸,地接衡庐
襟三江而带五湖,控蛮荆而引瓯越。
落款:王勃
在封装组件的过程中,可以为预留的
Test组件
{{ info }}
{{ info.name }}
{{ msg }}
结果为:
// Table.vue
id
name
state
// App.vue
{{ user.id }}
{{ user.name }}
结果为:
4. 自定义指令
vue官方提供了v-for、v-model、v-if等常用的内置指令,除此之外vue还允许开发者自定义指令。
vue中的自定义指令分为两类,分别是:
在每个vue组件中,可以在directives节点下声明私有自定义指令。
directives: {
// 声明私有自定义指令不用v-
focus: {
// 当被绑定的元素(这里是input)插入到DOM中,就会自动触发mounted()函数
mounted(el) {
el.focus()
}
}
结果为:
全局共享的自定义指令需要通过单页面应用程序的实例对象进行声明。
mounted函数:只在元素第一次插入DOM时被调用,当DOM更新时mounted函数不会被触发。
updated函数:会在每次DOM更新完成后被调用。
在vue2的项目中使用自定义指令时,mounted->bind,updated->updated
// 声明全局自定义指令
app.directive('focus', {
mounted(el) {
el.focus()
},
updated(el) {
el.focus()
}
})
如果mounted和updated函数中的逻辑完全相同,则可以简写成:
在绑定指令时,可以通过等号的形式为指令绑定具体的参数值。