作用域插槽slot的使用场景 -- vue组件通信系列

简介: 作用域插槽slot的使用场景 -- vue组件通信系列

作用域插槽slot的使用场景 -- vue组件通信系列


vue 组件的数据通信方式很多,本篇着重讲作用域插槽slot

slot的基本用法,这里不再赘述。

本篇强调的是,怎么通过slot来实现通信。准备来说,是在父组件里显示子组件给slot暴露的数据。

因为vue版本的原因,父组件使用slot的形式不一样,2.6.0以上使用新版本slot,以下则是旧版本。

新版本怎么使用作用域插槽

先写个demo:

父组件:

<template lang="pug">
div
  list-item
    template(v-slot:header="headerData")
      //- { "title": "ListItem的header", "desc": "header描述" }
      div {{headerData}}
    //- v-slot:可以简写为#
    template(#default="defaultData")
      //- { "title": "ListItem的default", "desc": "default描述" }
      div {{defaultData}}
    //- 可以解构使用
    template(v-slot:footer="{title,desc}")
      //- ListItem的footer
      div {{title}}
      //- footer描述
      div {{desc}}
</template>

子组件:

<template lang="pug">
div
  slot(name="header" title="ListItem的header" desc="header描述")
  //- name是default的话,可以省略name属性
  slot(name="default" title="ListItem的default" desc="default描述")
  slot(name="footer" title="ListItem的footer" desc="footer描述")
</template>

总结下:

  • 子组件,在内部将数据以属性的形式放在slot标签上
  • 父组件,通过template(v-slot:header="headerData")获取数据,数据是对象形式的
  • v-slot:可以简写成#
  • 数据可以解构
  • 必须配合template标签

旧版本怎么使用作用域插槽

依旧先写个demo:

父组件:

<template lang="pug">
div
  list-item
    //- { "title": "ListItem的header", "desc": "header描述" }
    div(slot="header" slot-scope="headerData") {{headerData}}
    div(slot="header" slot-scope="headerData") {{headerData}}
    //- slot="default" 可以省略
    //- { "title": "ListItem的default", "desc": "default描述" }
    div(slot-scope="defaultData") {{defaultData}}
    template(slot="footer" slot-scope="{title,desc}")
      div {{title}}
      div {{desc}}
</template>

子组件,没变化

总结下:

  • 子组件,在内部将数据以属性的形式放在slot标签上
  • 父组件,通过div(slot="header" slot-scope="headerData")获取数据,数据是对象形式的
  • 数据可以解构

第三方组件,使用作用域插槽

在使用element-uiel-table的时候,需要使用当前行的数据,就可以借助作用域

<template lang="pug">
el-table(...)
  el-table-column
    template(#default="scope")
      router-link(:to="scope.href") 观看视频
  //- 老版
    el-table-column
      router-link(slot-scope="scope" :to="scope.href") 观看视频
</template>


目录
相关文章
|
1天前
|
JavaScript
Vue实战-组件通信
Vue实战-组件通信
4 0
|
1天前
|
JavaScript
Vue实战-将通用组件注册为全局组件
Vue实战-将通用组件注册为全局组件
5 0
|
1天前
|
JavaScript 前端开发
vue的论坛管理模块-文章评论02
vue的论坛管理模块-文章评论02
|
1天前
|
JavaScript Java
vue的论坛管理模块-文章查看-01
vue的论坛管理模块-文章查看-01
|
2天前
|
JavaScript
vue页面加载时同时请求两个接口
vue页面加载时同时请求两个接口
|
2天前
|
JavaScript
vue里样式不起作用的方法,可以通过deep穿透的方式
vue里样式不起作用的方法,可以通过deep穿透的方式
|
2天前
|
移动开发 JavaScript 应用服务中间件
vue打包部署问题
Vue项目`vue.config.js`中,`publicPath`设定为&quot;/h5/party/pc/&quot;,在线环境基于打包后的`dist`目录,而非Linux的`/root`。Nginx代理配置位于`/usr/local/nginx/nginx-1.13.7/conf`,包含两个相关配置图。
vue打包部署问题
|
2天前
|
JavaScript 前端开发
iconfont 图标在vue里的使用
iconfont 图标在vue里的使用
11 0
|
2天前
|
资源调度 JavaScript 前端开发
vue 项目运行过程中出现错误的问题解决
vue 项目运行过程中出现错误的问题解决
|
2天前
|
JavaScript 前端开发
VUE里父组件与子组件的交互操作
VUE里父组件与子组件的交互操作