博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue内置组件的使用
阅读量:682 次
发布时间:2019-03-15

本文共 4852 字,大约阅读时间需要 16 分钟。

内置组件的使用

引用vue官网中内置组件,

component

Props:

is - string | ComponentDefinition | ComponentConstructor
inline-template - boolean

用法:

渲染一个“元组件”为动态组件。依 is 的值,来决定哪个组件被渲染。

其中component又叫动态组件,属性中 is 指定渲染的组件。

代码解释如下:

  
Document

keep-alive

Props:

include - 字符串或正则表达式。只有名称匹配的组件会被缓存。

exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
max - 数字。最多可以缓存多少组件实例。

用法:

< keep-alive > 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 < transition> 相似,< keep-alive > 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。

当组件在 < keep-alive> 内被切换,它的 activated 和 deactivated两个生命周期钩子函数将会被对应执行。

在 2.2.0 及其更高版本中,activated 和 deactivated 将会在 < keep-alive> 树内的所有嵌套组件中触发。

主要用于保留组件状态或避免重新渲染。

注意,< keep-alive > 是用在其一个直属的子组件被开关的情形。如果你在其中有 v-for 则不会工作。如果有上述的多个条件性的子元素,< keep-alive> 要求同时只有一个子元素被渲染。

2.1.0 新增 include and exclude

include 和 exclude 属性允许组件有条件地缓存。二者都可以用逗号分隔字符串、正则表达式或一个数组来表示:

匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值)。匿名组件不能被匹配。

2.5.0 新增 max

最多可以缓存多少组件实例。一旦这个数字达到了,在新实例被创建之前,已缓存组件中最久没有被访问的实例会被销毁掉。

< keep-alive> 不会在函数式组件中正常工作,因为它们没有缓存实例。

  
Document
  • <keep-alive> 缓存组件

    把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染可以添加一个 keep-alive

    包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们,主要用于保留组件状态或避免重新渲染

    • include(String/Regexp) : 指定缓存组件名
    • exclude(String/Regexp) : 指定不缓存的组件名

slot

Props:

name - string,用于命名插槽。

Usage:

< slot> 元素作为组件模板之中的内容分发插槽。< slot> 元素自身将被替换。

Default slot content
Mouse position: {
{
x }}, {
{
y }}

利用组件内容进行通讯(父->子)

在组件模板中利用内置组件<slot></slot>来承载组件内容,否则它的内容都会被忽略(被模板内容覆盖)

  • 默认插槽default

    首页
  • 具名插槽:

    • 模板内容:给<slot/>组件命名(设置name属性)
    • 组件内容:设置slot属性,实现内容精准显示到模板具体位置

    Vue2.6+已经废除slot属性,改成v-slot:name(只能用在template元素或组件上)

这里的内容显示到name为header的插槽
这里的内容显示到默认插槽
这里的内容显示到name为footer的插槽
这里的内容显示到默认插槽

作用域插槽(子- >父)

Vue编译规则:父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内编译

利用作用域插槽(slot-scope)实现把组件模板template中的数据传到组件内容中处理,实现特殊定制(PS:Vue2.6+已废除该属性,改为v-slot:name格式,简写:#name)

{
{username}},{
{msg}}
{
{player}}
{
{props.msg}},{
{props.username}}
{
{props.msg}},{
{props.username}}
{
{foot.title}},{
{foot.player}}

transition 和 transition-group

过渡动画

  • <transition>
  • <transition-group>

<transition>用于单个元素动画,<transition-group>用于多个元素并解析为一个标签(默认:span)

属性

  • name : 过渡类名前缀(默认:v)

    如设置name=“fade”,过渡类名变成:fade-enter / fade-enter-active / fade-leave / fade-leave-active

  • css : boolean,是否使用 CSS 过渡类(默认:true)。设置为 false,将只通过组件事件触发注册的 JavaScript 钩子。

  • 自定义过渡类名(可配合animate.css框架实现过渡效果)

    • enter-class
    • enter-active-class
    • enter-to-class
    • leave-class
    • leave-active-class
    • leave-to-class

触发动画场景

Vue会自动检测是否设置css动画或JavaScript钩子,并在下列情形中添加进入/离开过渡效果(css过渡或javascript过渡)

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

CSS过渡

  • 通过CSS过渡类名

    组件过渡过程中,默认会有四个CSS类名自动进行切换,会有如下四个CSS类名:

    • v-enter:进入过渡的开始状态,元素被插入时生效,只应用一帧后立即删除;
    • v-enter-active:进入过渡的结束状态,元素被插入时就生效,在过渡过程完成之后移除;
    • v-leave:离开过渡的开始状态,元素被删除时触发,只应用一帧后立即删除;
    • v-leave-active:离开过渡的结束状态,元素被删除时生效,离开过渡完成之后被删除;

在这里插入图片描述

JavaScript过渡

通过内置事件实现过渡动画效果,可以利用第三方动画库(如:velocity.js,jquery等)实现动画效果

methods: {
// 过渡进入 // 设置过渡进入之前的组件状态 beforeEnter: function (el) {
// ... }, // 设置过渡进入完成时的组件状态 enter: function (el, done) {
// ... done() }, // 设置过渡进入完成之后的组件状态 afterEnter: function (el) {
// ... }, enterCancelled: function (el) {
// ... }, // 过渡离开 // 设置过渡离开之前的组件状态 beforeLeave: function (el) {
// ... }, // 设置过渡离开完成时地组件状态 leave: function (el, done) {
// ... done() }, // 设置过渡离开完成之后的组件状态 afterLeave: function (el) {
// ... }, // leaveCancelled 只用于 v-show 中 leaveCancelled: function (el) {
// ... } }

代码解释如下:

  
Document
我是div,会消失和隐藏

注意点

以上内置组件不会产生具体的html结构;

转载地址:http://knomz.baihongyu.com/

你可能感兴趣的文章