插槽相关知识

580 阅读3分钟

重识props(校验)

  1. 普通的数组类型['属性名']
  • 没有校验功能
  1. 进阶对象类型
  • (1)required:true (必填项)
  • (2)default:"默认值"
  • 基本数据类型,直接写数据
  • 引用数据类型,要写()=>xxx(函数加返回值)
  • (3)自定义类型
  • 当属性传入,validator函数会自动执行,接收参数
  • 返回值为true,则校验通过
  • (4)type检测数据类型
  status: {
      // 当属性传入,validator会自动执行,接收参数
      // 如果validator函数返回true,表示校验通过
      validator: function (value) {
        console.log(value)
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
       }
      } 
     },

内置的组件component

  • 语法: <component :is="comName"></component>可以动态显示组件
  • 注意点:
  • is只能是动态属性=>:is="组件注册后的标签名字符串或data变量"
  • 不能直接拿注册标签名赋值使用
  • 在操作切换时会创建另一个,销毁自己

keep-alive组件

  • 语法:在外部加一个<keep-alive> </keep-alive> 标签
  • include="组件名1,组件名2..."
  • :include="['组件名1', '组件名2']"

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

  • 作用:可以缓存数据,不会被销毁外加两个生命周期
    activated - 激活 deactivated - 失去激活状态

  <keep-alive>
     <!-- vue内置的组件component, 可以动态显示组件 -->
     <component :is="comName"></component>
  </keep-alive>

插槽

1. 什么是插槽

  • 组件通过插槽传入自定义结构
  • 用于实现组件的内容分发,通过slot标签,可以接收到写在组件标签中的内容
  • vue提供组件插槽功能,允许开发者在封装组件时,把不确定的部分定义为插槽

2.使用方法

  • 定义:
            <template>
            内容1
            <slot>默认内容</slot>
            内容2
            </template>
  • 使用
            <MyCom>
            <h1>内容</h1>
            </MyCom>

类似覆盖掉slot里面的数据,当没有slot时,没有数据

在父传子中
1.传数据,自定义属性       (父)     props(子)
2.传结构,在组件中写内容   (父)     slot(子)

3.具名插槽

  • 定义:<slot name="xxx">
  • 使用: <template #xxx></template>

<template v-slot:xxx></template>

  • 注意点:
  1. 传入的标签可以分别派发给不同的slot位置
  2. v-slot一般跟template标签使用 (template是html5新出标签内容模板元素, 不会渲染到页面上, 一般被vue解析为内部标签)

4.自定义指令

  • 语法1:对象
        directives:{
        指令名(a,b){不是靠返回值,靠配置项}
        }
        a,b叫配置对象
        a指向dom实例(elemet元素)
        b指向配置对象(关系表达式)=>binding绑定

对象的完整用法

        指令名:{
        bind(a,b){绑定时,一上来},
        inserted(a,b){元素插入页面时},
        updata(a,b){模块重新解析时}
        往往bind的数据与updata的数据相同
        }
  • 语法2:函数
        directives:{
        指令名:回调函数{不是靠返回值,靠配置项}
        }

如果是函数时,函数什么时候被调用

        1.指定与元素成功绑定时(一上来)
        2.指定所在的模块被重新解析时
        即:当绑定的元素被读写时,函数被重新调用

注意:所有的命令的this指向=>window