2020/10/18 、 周日、今天又是奋斗的一天。

@Author:Runsen
@Date:2020/10/18

写在前面:我是「Runsen」,热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。大四弃算法转前端,需要每天的日积月累, 每天都要加油!!!

文章目录

  • 非父子(兄弟)组件间传值(重要)
  • Vue插槽的使用
    • 单一插槽
    • 具名插槽
  • 插槽作用域
  • 后言

非父子(兄弟)组件间传值(重要)

如果2个组件不是父子组件,那么如何通信呢?这时可以通过bus来实现通信.

非父子之间传值,可以采用发布订阅模式,这种模式在 Vue 中被称为总线机制,或者叫做 Bus / 发布订阅模式 / 观察者模式。

下面实现一个例子:实现点击Runsen时,Maoli变成Runsen;点击Maoli时,Runsen变成Maoli;(兄弟组件传值)

<body><!-- 非父子(兄弟)组件间传值(Bus/总线/发布订阅模式/观察者模式) --><div id="app"><child content="Runsen"></child><child content="Maoli"></child></div><script>//两个组件进行传值,但是两个组件不具备父子关系//第一种方式:发布订阅模式(总线机制)// Vue.prototype.bus=newVue() 这句话的意思是,// 在 Vue 的 prototype挂载了一个 bus属性,这个属性指向 所有的Vue 的实例,只要我们之后调用 Vue 或者 newVue时,每个组件都会有一个 bus属性,因为以后不管是 Vue 的属性还是 Vue 的实例,都是通过 Vue 来创建的,而在 Vue 的 prototype上挂载了一个 bus的属性,。Vue.prototype.bus=new Vue() // 必须在var vm=new Vue 之前挂载bus属性Vue.component('child',{//因为子组件不能改变父组件,所以需要复制一份(单向数据流)data:function(){return {selfcontent:this.content}},props:{content:String},template:'<div @click="handleclick">{{selfcontent}}</div>',methods:{handleclick:function(){//this.bus指的是实例上挂载的bus                      //将这个组件的内容传递给另一个组件this.bus.$emit('change',this.selfcontent);}},//生命周期钩子,这个组件被挂载的时候执行的一个函数mounted:function(){var this_=this;//监听触发出来的事件this.bus.$on('change',function(msg){this_.selfcontent=msg;})}})var vm=new Vue({el:'#app',})</script>
</body>

Vue插槽的使用

插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。

简单理解就是:给子组件占的每一个坑取名,将父组件添加的HTML元素添加到指定名字的坑,就实现了分发内容在不同位置显示

单一插槽

<slot></slot>一般写在子组件中的template。

<body><div id="app"><child><h1>hello</h1></child></div><script>// 插槽就是占位符,父组件中内容是<h1>hello</h1>,所以子组件显示<h1>hello</h1>// 局部组件需要注册var child = {template: '<div><slot>默认插槽的内容</slot></div>'}var vm = new Vue({components: {child: child},el: "#app"})</script>
</body>

具名插槽

匿名插槽没有name属性,就像上面的单一插槽的例子,又叫是匿名插槽,那么,插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次。出现在不同的位置。

<body><div id="root"><child><h1 slot="header">header</h1><h1 slot="footer">footer</h1></child></div><script>var child = {template: `<div><slot name="header"></slot><div><h2>content</h2></div><slot name="footer"></slot></div>`}var vm = new Vue({components: {child: child},el: "#root"})</script>
</body>

插槽作用域

作用域插槽和上面的两种插槽区别在于可以绑定数据:

绑定在 <slot>元素上的 attribute 被称为插槽prop。现在在父级作用域中,通过slot-scope获取插槽作用域

我们可以使用带值的 v-slot来定义我们提供的插槽prop的名字。

<body><div id="root"><child><template slot-scope="props"><h1>{{props.item}}</h1></template></child></div><script>Vue.component('child', {data: function() {return {list: [1, 2, 3, 4]}},template: `<div><ul><slot v-for="item of list":item=item></slot></ul></div>`})var vm = new Vue({el: '#root'})</script>
</body>

以上就是我今天对solt的理解和学习, 希望对你有帮助

参考文章

  • https://mp.weixin.qq.com/s/VM2YzyM6KOkDbEeGKusJPg
  • https://mp.weixin.qq.com/s/YM8q6PKUVGO2p_AUzD-7Ww
  • 慕课网Vue2.5->2.6->3.0 开发去哪儿网App 从零基础入门到实战项目开发

后言

不为明天而焦灼,不为今天而叹息,只为今天更美好。

请一键三连!!!!!

六十三、Vue中非父子(兄弟)组件间传值,插槽的使用和作用域插槽(非常重要)相关推荐

  1. vue中,兄弟组件之间传值

    vue中,兄弟组件之间传值 项目中,需要使用多个子组件,当需要传递值的时候,较为麻烦,怎样实现呢 1.一般可以使用子组件a传递给父组件,再由父组件传递给子组件b.但是一般较为麻烦, 2.使用bus作为 ...

  2. VUE:兄弟组件间传参

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.定义一个中间  eventBus.js  ,只有 2 行代码,用于传参: // 此页面是vue ...

  3. Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)

    (一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...

  4. Vue全家桶之组件间的通信(四)

    Vue全家桶之组件间的通信(四) 概述 组件是Vue中最强大的功能,组件实例之间的数据无法直接相互引用,所以需要掌握组件间通信的方式和技巧. 组件实例之间的关系可以分为父子关系.兄弟关系和隔代关系.针 ...

  5. Vue组件间传值详解

    文章目录 1. 父组件向子组件传值 1.1 描述 1.2 props接收数据: 2. 子组件向父组件传值 3. 兄弟组件间传值 4. 事件总线 5. Ref 6. root/parent/childr ...

  6. 【Vue】组件间传值的三种方式:父传子,子传父,非父子传值

    引用官网的一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: 1,父组件传值给子组件 代码: &l ...

  7. Vue组件之间的通讯方式——父传子、子传父、兄弟组件间的通讯

    目录 一.父传子 1.props 属性传递 2.方法传递 3. $parent获取方法和属性 二.子传父 1. 属性传递 2 .通过$refs主动获取子组件方法和属性 3 .通过$children主动 ...

  8. Vue实现兄弟组件间的方法调用及回调

    Vue实现兄弟组件间的方法调用及回调 看兄弟间数据传递的看我写的这篇文章:vue实现兄弟组件间的实时通信 先说说我遇到的情况: 点击左侧树tree,需要调用右侧houseInfo组件中的新增方法,弹出 ...

  9. vue组件间传值: 父传子、子传父、非父子组件传值

    父组件向子组件传值 // 父组件通过属性将值传递给子组件 <template><div><closePopup :optionsID="optionsID&qu ...

最新文章

  1. tq2440实验手册qt编译问题
  2. C#远程访问linux(ubuntu)或windows的mysql数据库
  3. redis 底层数据结构 压缩列表 ziplist
  4. java nextintln_Java对正则表达式的支持(二)
  5. IpIImage - CvMat 转换方法
  6. 使用 NVM 管理不同的 Node.js 版本
  7. html广告悬浮窗口,JS实现悬浮移动窗口(悬浮广告)的特效
  8. java 常量池溢出_Java方法区和运行时常量池溢出问题分析(转)
  9. .NET配置文件的原因、位置和方式
  10. 管理九段,你的管理入围“几段”了?
  11. 【TPshop踩雷篇 — 数据库连接配置失败】
  12. Altium Designer19 生成Gerber文件方法
  13. chrome文字转语音(tts)
  14. 基于matlab的图像复原,MATLAB在图像复原中的应用
  15. 领域驱动(自己理解)
  16. i.MX6ULL终结者硬件资源说明
  17. Altium designer学习(三)贴片元器件的选择——贴片电阻篇
  18. 线性稳压芯片的优势及注意事项
  19. 《麦田里的守望者》谁又不是以过来人的身份,来做一个麦田里的守望者呢?
  20. java 办公_Java003-协同办公OA

热门文章

  1. list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
  2. python读取路径中字符串_python实现提取str字符串/json中多级目录下的某个值
  3. matlab功能块的作用,STEP7中功能块的使用属性说明
  4. thymeleaf取model值_史上最详 Thymeleaf 使用教程
  5. extjs4mvc增删改查_asp.net下利用MVC模式实现Extjs表格增删改查
  6. FinanceJson
  7. HDU 5389 Zero Escape
  8. pat1014. Waiting in Line (30)
  9. 用于Web开发的8 个最好的跨平台编辑器
  10. 【Demo 0085】导出EXE文件资源