Vue–》动态组件和插槽的使用讲解

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Vue–》动态组件和插槽的使用讲解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Vue--》动态组件和插槽的使用讲解

目录

动态组件

keep-alive使用

keep-alive的include和exclude属性

插槽


动态组件

动态组件指的是动态切换组件的显示与隐藏,vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染。什么意思呢?接着往下看:

Vue--》动态组件和插槽的使用讲解

那么内置的<component>组件是什么情况呢?component 是可以作为标签使用的,其作用组件的占位符。当然其作为标签直接使用是会报错的,还需要搭配属性值 is其表示要渲染的组件的名字。如下:

Vue--》动态组件和插槽的使用讲解

那么如何去动态的切换组件呢?写一个简单的button按钮实现即可,如下:

Vue--》动态组件和插槽的使用讲解

Vue--》动态组件和插槽的使用讲解

keep-alive使用

当我们动态的去创建组件时,这一点和 v-if 很相似,改变组件会直接将改变之前的组件的数据销毁掉。如下:

我们给Left组件设置 +1 按钮,来表示其数据:

Vue--》动态组件和插槽的使用讲解

用生命周期函数来监听组件的创建和销毁:

Vue--》动态组件和插槽的使用讲解

Vue--》动态组件和插槽的使用讲解

那我们如何在动态创建组件的同时还能暴露组件之前的数据呢?这里就需要借助keep-alive。

Vue--》动态组件和插槽的使用讲解

Vue--》动态组件和插槽的使用讲解

keep-alive对应的生命周期函数

当组件被缓存时,会自动触发组件的deactivated生命周期函数。

当组件被激活时,会自动触发组件的activated生命周期函数。

created(){
    console.log('Left组件被"创建"了');
},
destroyed(){
    console.log('Left组件被"销毁"了');
},

// 当组件第一次被创建的时候,既会创建created生命周期,也会执行activated生命周期
// 当组件被激活时,只会触发activated生命周期,不再触发created。因为组件没有被重新创建
activated(){
    console.log('组件被激活了,activated');
},
deactivated() {
    console.log('组件被缓存了,deactivated');
},

Vue--》动态组件和插槽的使用讲解

keep-alive的include和exclude属性

include属性用来指定:只有名称匹配的组件会被缓存。多个组件名之间使用英文的逗号分隔:

exclude属性用来指定:只有名称匹配的组件“不“会被缓存。多个组件名之间使用英文的逗号分隔:

Vue--》动态组件和插槽的使用讲解

插槽

插槽Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。其操作如下:

Vue--》动态组件和插槽的使用讲解

vue官方规定:每一个slot插槽,都要有一个name名称,如果省略了slot的name属性,则有一个默认名称叫做 default ,默认情况下,在使用组件的时候,提供的内容都会被填充到名字为default的插槽之中。

如果要把内容填充到指定名称的插槽中,需要使用 v-slot:这个指令,v-slot:后面要跟上插槽的名字,注意:v-slot:指令不能直接用在元素身上,必须用在template标签上。当然这个指令也是有简写形式:# 即可。template:这个标签是一个虚拟标签,只其到包裹性质的作用,不会被渲染为任何实质性的 html 元素。

Vue--》动态组件和插槽的使用讲解

Vue--》动态组件和插槽的使用讲解

后备内容:封装组件时,可以为预留的<slot>插槽提供后备内容(默认内容)。如果组件的使用者没有为插槽提供任何内容,则后备内容会生效。

Vue--》动态组件和插槽的使用讲解

作用域插槽:在封装组件时,为预留的<slot>提供属性对应的值。如下:

Vue--》动态组件和插槽的使用讲解

Vue--》动态组件和插槽的使用讲解

当然上面的作用域插槽数据明显是写死了,那么可以将数据动态存储在data里面吗?答案是可以的

Vue--》动态组件和插槽的使用讲解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140030.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!