当前位置 : 主页 > 网络编程 > 其它编程 >

用最通俗易懂的方式掌握动态组件和插槽

来源:互联网 收集:自由互联 发布时间:2023-07-02
组件进阶-props校验props校验普通格式props:[propA,propB]。没有类型检查高阶格式props:{基础的类型检查(nu 组件进阶-props校验 props校验 普通格式props: ["propA", "propB"]。没有类型检查 高阶格式 p
组件进阶-props校验props校验普通格式props:[propA,propB]。没有类型检查高阶格式props:{基础的类型检查(nu

组件进阶-props校验

props校验

普通格式props: ["propA", "propB"]。没有类型检查

高阶格式

props: {// 基础的类型检查 (null 和 undefined 会通过任何类型验证)propA: Number,// 多个可能的类型propB: [String, Number],// 必填的字符串propC: {type: String,required: true},// 带有默认值的数字propD: {type: Number,default: 100},// 带有默认值的对象propE: {type: Object,// 对象或数组默认值必须从一个工厂函数获取default: function () {return { message: hello }}},// 自定义验证函数propF: {validator: function (value) {// 这个值必须匹配下列字符串中的一个return [success, warning, danger].indexOf(value) ! -1}}}

组件进阶 - 动态组件

目标效果

outside_default.png

需求: 完成一个注册功能页面, 2个按钮切换, 额外封装两个组件一个填写注册信息, 一个填写用户简介信息

目标: 多个组件使用同一个挂载点并可以动态切换这就是动态组件

目录结构

根组件├── App.vue└── components├── UserName.vue # 用户名和密码输入框└── UserInfo.vue # 人生格言和自我介绍框

格式

操作

UserName.vue

UserName

用户名: 

密码: 

在父组件App.vue中使用

账号密码填写个人信息填写

下面显示注册组件:

注意

  • is只能是动态属性》:is"组件注册后的标签名字符串或data变量"

  • 不能直接拿注册标签名赋值使用

小结

vue内置component组件, 配合is属性, 设置要显示的组件标签名字

组件进阶-keep-alive组件

目标

掌握组件缓存的使用

背景

组件切换会导致组件被频繁销毁和重新创建, 大多数情况下是有自己的意义的但也可能会导致不必要的性能损耗

演示1: 可以先给UserName.vue和UserInfo.vue 注册created和destroyed生命周期事件, 观察创建和销毁过程

keep-alive

使用Vue内置的keep-alive组件, 可以让包裹的组件保存在内存中不被销毁

格式

演示2: 使用keep-alive内置的vue组件, 让动态组件缓存而不是销毁

补充生命周期:

  • activated - 激活

  • deactivated - 失去激活状态

小结

keep-alive可以提高组件的性能, 内部包裹的标签不会被销毁和重新创建, 触发激活和非激活的生命周期方法

组件进阶-keep-alive组件-指定缓存

目标

掌握keep-alive的include属性的用法

语法

  • include"组件名1,组件名2..."

  • :include"[组件名1 组件名2]"

  • 注意

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

  • 组件进阶 - 默认插槽

    目标

    掌握组件插槽的使用

    理解

    生活中的插槽

    outside_default.png

    vue中的插槽

  • 组件通过插槽传入自定义结构

  • 用于实现组件的内容分发, 通过 slot 标签, 可以接收到写在组件标签内的内容

  • vue提供组件插槽能力, 允许开发者在封装组件时把不确定的部分定义为插槽

  • 格式

    在定义组件时在template中用slot来占个坑

    使用时将组件之间的内容来填坑

    9a1fe901d4b6997a89e0ae4d20ea6570.png

    示例

    组件进阶-具名插槽

    目标

    掌握具名插槽的使用

    背景

    当一个组件内有2处以上需要外部传入标签的地方

    格式

    定义

    使用

    • ;

    图示

    e7090717b556fb89e5062b48ba17b03c.png
  • 传入的标签可以分别派发给不同的slot位置

  • v-slot一般跟template标签使用 (template是html5新出标签内容模板元素, 不会渲染到页面上, 一般被vue解析为内部标签)

  • 示例

  • 子组件-Pannel2.vue

  • 2 .父组件-UseSlot2.vue

    v-slot可以简化成#使用

    v-bind可以省略成:

    v-on: 可以省略成

    v-slot: 可以简化成#

    写法1:

    我是文字哦

    写法2

    寒雨连江夜入吴,

    平明送客楚山孤。

    洛阳亲友如相问

    一片冰心在玉壶。

    小结

  • slot有可以设置多个

  • 定义组件时slot的name属性起插槽名

  • 使用组件时, template配合#插槽名传入具体html标签或组件

  • 组件进阶-作用域插槽难点

    0c40244755ec007892eb7f19268ebb5a.png

    目标

    掌握作用域插槽的用法

    目标: 子组件中的数据, 在给插槽赋值时在父组件环境下使用> 子传父》传数据

    步骤

    • 创建子组件, 准备slot, 在slot上绑定属性和子组件值

    • 使用子组件, 传入自定义标签, 用template和v-slot"自定义变量名"

    • 自定义变量名会自动绑定slot上所有属性, 就可以使用子组件内值, 并替换slot位置

    示例

    具名插槽, 给slot绑定属性和值

    9d3b7902cb82b1293982f574f6d1f156.png

    子组件

    默认内容
  • 父组件

  • 45-插槽-作用域插槽

    {{scope.a}}

    {{scope.b}}

    小结

    组件内变量绑定在slot上, 然后使用组件v-slot:插槽名字"变量" 变量上就会绑定slot传递的属性和值

    自定义指令-基本使用

    自定义指令文档[1]了解

    除了核心功能默认内置的指令 (v-model 和 v-show)等Vue 也允许注册自定义指令》 v-xxx

  • htmlcssjs的复用的主要形式是组件

  • 你需要对普通 DOM 元素进行底层操作这时候就会用到自定义指令

  • 作用

    扩展标签额外的功能

    自定义指令-定义方式

    {data(){},methods: {},directives: {focus: { // 自定义指令名inserted(el){ // 固定配置项 - 当指令插入到标签自动触发此函数el.focus()}},},}

    示例 自动获取焦点

    自定义指令-传值和更新

    目标: 使用自定义指令, 传入一个值

    需求: 定义color指令-传入一个颜色, 给标签设置文字颜色

    main.js定义处修改一下

    directives: {"color":{inserted(el, binding){ // 插入时触发此函数el.style.color  binding.value;},update(el, binding){ // 更新绑定的变量时触发此函数》手动更新el.style.color  binding.value;}}}

    Direct.vue处更改一下

    使用v-color指令控制颜色, 点击变蓝

    总结: v-xxx, 自定义指令, 获取原生DOM, 自定义操作

    关于本文

    作者pain_past_is_pleasur

    https://juejin.cn/post/7095716277196587039

    The End

    上一篇:ApacheFlinkTableAPI的Catalog
    下一篇:没有了
    网友评论