目录
动态组件(component组件)
1. 组件(相当于组件的占位符,有is属性指定渲染组件名字)
2.使用 组件保持动态组件的状态
3.keep-alive 对应的生命周期函数(缓存:deactivated,激活:actived)
4.keep-alive 的 include 属性或exclude属性(指定的name值组件会被缓存)
5.完整动态组件使用方法
插槽(v-slot:指令)
1.插槽的基础用法
2.具名插槽
3.作用域插槽(为预留的 插槽绑定 props 数据)
3.1可以使用 v-slot: 的形式,接收作用域插槽对外提供的数据,解构插槽 Prop
4.将App.vue的值传到插槽中,实现父传孙,孙传父(自定义属性,自定义事件)
自定义指令(私有和全局)
1.私有自定义指令(在 directives 节点下声明)
1.2.在使用自定义指令时,需要加上 v- 前缀
1.3.为自定义指令动态绑定参数值
1.4.通过 binding 获取指令的参数值
1.5.bind函数和update 函数
1.6.bind函数 和update 函数简写
1.7.完整写法
2.全局自定义指令(Vue.directive())
vue 提供了一个内置的
可以通过is属性的值,表示要渲染的组件的名字,is属性的值,应该是组件在components节点下的注册名称。
App.vue文件:
App 根组件
keep-alive可以把内部的组件进行缓存,而不是销毁组件
在组件文件内:
/* 当组件第一次被创建的时候,既会执行created生命周期,也会执行activated生命周期
当组件被激活的时候,只会触发actived生命周期,不再触发created,因为组件没有被重新创建*/
activated(){
console.log('组件被激活了,activated');
},
deactivated(){
console.log('组件被缓存了,deactivated');
}
在使用keep-alive时,其include 属性用来指定:只有名称匹配的组件会被缓存。多个组件名之间使用英文的逗号分隔; 或者使用exclude 属性指定排除项
注意:与include只能两个写一个
App.vue
Left.vue
App.vue
App 根组件
Left.vue
Left 组件====={{count}}
被使用的组件:
这是default插槽默认的默认内容
使用组件的组件:
这是在Left组件的内容区域,声明的p标签
使用组件的组件:
迪丽热巴
被使用的组件:
Article组件
使用组件的组件:
迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴
迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴
迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴迪丽热巴
{{ msg }}
{{ user.name }}
子组件Goods.vue
App.vue
孙组件Counter.vue
{{ num }}
App 根组件
迪丽热巴
形参中的el表示当前指令所绑定的那个DOM对象
/* 私有自定义指令节点directives */
directives: {
// 定义名为color的指令,指向一个配置对象
color:{
//当指令第一次被绑定到元素上的时候,会立即触发bind函数
//形参中的el表示当前指令所绑定的那个DOM对象
// 通过binding对象的.value属性,获取动态的参数值
bind(el,binding){
console.log('触发了v-color的bind函数');
console.log(binding);
el.style.color=binding.value
},
//每次DOM更新时被调用,会触发update函数
update(el,binding){
console.log('触发了v-color的update函数');
el.style.color=binding.value
}
}
/* 如果bind和update函数中的逻辑完全相同,则对象格式的自定义指令可以简写成函数格式 */
color(el, binding) {
el.style.color = binding.value;
},
App 根组件
迪丽热巴
import Vue from 'vue'
import App from './App.vue'
/* 在终端提示打包发布 */
Vue.config.productionTip = false
/* 全局自定义指令 */
/* Vue.directive('color', {
bind(el, binding) {
el.style.color = binding.value
},
update(el, binding) {
el.style.color = binding.value
}
}) */
Vue.directive('color', function(el, binding) {
el.style.color = binding.value
})
/* 全局过滤器 */
// Vue.filter('过滤器名字', function() {})
new Vue({
render: h => h(App),
}).$mount('#app')