$attrs 包含了父作用域中不作为prop被识别的特性绑定,当一个组件没有声明props时,这里会包含所有父作用域的绑定,

$listeneers 包含了父作用域中的v-on事件监听器,它可以通过v-on='$listeners'传入内部组件;

demo:

parent:

<template><div><h1>this is test tempalte</h1><child :msg='message' msg1='msg11' msg2='msg22' @changeMessage='changeMessage' msg4='msg44'></child></div>
</template>
<script>
import child from '@/components/attr/attr1'
export default {name:'',components:{child},data(){return{message:'message info',}},methods:{changeMessage(msg){alert(msg);}}
}
</script>

child

<template><div><h2 @click='change' style='color:red'>{{$attrs}}</h2></div>
</template>
<script>
export default {name:'',props:['msg'],components:{'child-child':child},data(){return{}},methods:{change(){this.$emit('changeMessage','from attr1');},change1(msg){alert(msg);}}
}
</script>

$attrs:{ "msg1": "msg11", "msg2": "msg22", "msg4": "msg44" },除了prop之外,父元素传递的所有值,如果子元素没有prop,

$attrs是{message:'message info',"msg1": "msg11", "msg2": "msg22", "msg4": "msg44" },$listeners传递父元素的事件,任意子元素可以通过$emit触发changeMessage事件;

$bus,bus总线

就是兄弟组件之间的传值,通过一个额外的vue实例来绑定事件和数据

demo:

var Bus = new Vue(); //为了方便将Bus(空vue)定义在一个组件中,在实际的运用中一般会新建一Bus.js
Vue.component('c1',{ //这里已全局组件为例,同样,单文件组件和局部组件也同样适用
template:'<div>{{msg}}</div>',data: () => ({msg: 'Hello World!'}),created() {Bus.$on('setMsg', content => { this.msg = content;});}
});
Vue.component('c2',{template: '<button @click="sendEvent">Say Hi</button>',methods: {sendEvent() {Bus.$emit('setMsg', 'Hi Vue!');}}
});
var app= new Vue({el:'#app'
})

provide/inject

父组件通过provide来提供变量,然后子子组件中通过inject来注入变量,不论子组件有多深,只要调用inject就可以注入provide中的数据,只要在父元素的生命周期中,都可以调用

demo:

<template><div><h1>this is test tempalte</h1><child :msg='message' msg1='msg11' msg2='msg22' @changeMessage='changeMessage' msg4='msg44'></child></div>
</template>
<script>
import child from '@/components/attr/attr1'
export default {name:'',components:{child},provide:{arr:[1,2,3,4],obj:{name:'zahngsan',age:12}},data(){return{message:'message info',}},methods:{changeMessage(msg){alert(msg);}}
}
</script>

子组件

<template><div><h2 @click='change' style='color:red'>{{$attrs}}</h2><child-child v-bind='$attrs' v-on='$listeners' @change1='change1'></child-child></div>
</template>
<script>
import child from '@/components/attr/attr2'
export default {name:'',props:['msg'],components:{'child-child':child},data(){return{arr:this.arr}},inject:['arr','obj'],mounted:function(){console.log(this.arr,this.obj);},methods:{change(){this.$emit('changeMessage','from attr1');},change1(msg){alert(msg);}}
}
</script>

子组件inject父组件中provide中的数据,可以获取到obj和arr

转载于:https://www.cnblogs.com/xiaofenguo/p/11264064.html

vue 组件传值$attrs $listeners $bus provide/inject $parent/$children相关推荐

  1. vue之组件传值 爷到孙 provide inject

    目录 vue之组件传值 爷到孙 provide && inject 使用 provide提供依赖,单个数据,数组形式接受 根组件Main.vue 子组件 B.vue BSon.vue ...

  2. vue和html传值,vue组件传值.html

    .ball{ width: 20px; height: 20px; border-radius: 20px; background-color: red; } 这是一个新的全局组件 var app = ...

  3. vue跨组件之间传值Provide/Inject

    官网传送门:inject  Vue2.2.0+ # 背景   关于Vue组件的通讯方式相信大家能倒背如流 父子组件:通过prop,$emit,[$root,$parent,$children] 非父子 ...

  4. Vue 组件化通信 provide inject ,dispatch ,boardcast

    入门 作为前端最容易上手的框架,Vue入门其实没啥说的,我放一段清单的代码,大家能看懂就说明能上手了 <template><div id="app">< ...

  5. export default用法vue_Vue组件通信—provide/inject

    前言: 之前在 Vue 中进行组件通信一般都会使用 props,开始使用 provide/inject 是非常偶然的一次尝试. 当时在开发中需要实现祖孙组件,甚至祖祖祖祖孙组件之间的通信,在这种多层级 ...

  6. Vue组件传值——兄弟组件传值

    兄弟组件传值 兄弟组件之间彼此没有联系,它们需要通过中间Vue实例对象bus(快递员)进行数据传递. 1. 声明事件 给组件实例(或Vue实例) 声明事件有两种方式: 直接声明 通过$on实现 给组件 ...

  7. vue学习【非父子组件传值问题(Bus/总线/观察者模式)】

    如果两个组件是父子关系,就可以通过props的方式传值. 父组件通过props向子组件传值,子组件通过事件触发向父组件传值 那么如果两个组件之间不具备父子关系,该如何传值呢?任何一个网页都可以拆分成几 ...

  8. Vue组件传值(props属性,父到子,子到父,兄弟传值)

    文章目录 @[TOC](文章目录) 前言 一.props是什么? 使用规则 二.父传子 props 实现步骤 代码实现 效果展示 二.子传父 $emit 实现步骤 代码实现 效果展示 三.兄弟传值 E ...

  9. Vue自定义组件及组件传值

    vue自定义组件: 1.在src中components中,新建文件,后缀名为.vue组件(首字母建议大写)例如:Weekly.vue 2.Weekly.vue: 3.在app.vue中引用组件: js ...

最新文章

  1. 鸿蒙投屏和普通投屏,华为智慧屏SE发布:预装鸿蒙 可一碰投屏
  2. Linux云自动化运维第六课
  3. H5开发的web APP和原生APP的区别
  4. springboot接收JSONArray
  5. android按钮在容器下方,使用flex布局解决安卓手机上固定在底部的按钮,在键盘弹起后挡住input输入框的问题...
  6. ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
  7. python8个程序语言_所有程序员必知--2019年最流行的8种编程语言和框架
  8. 干掉Dubbo !这个后端开发框架就是王者!
  9. Spring IOC之Bean初始化篇
  10. .ne中的控制器循环出来的数据如何显示在视图上_让不懂编程的人爱上iPhone开发系列2 iOS12+Swift4.2版-Checklists-16...
  11. asterisk远程注册
  12. 这些年,网商基本上靠薄利多销获利
  13. Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换
  14. 重磅!解读国内唯一入选全球顶会SIGCOMM的阿里云网络论文
  15. Ansys SCDM基本操作
  16. Android 项目上线流程总结
  17. 1114 Family Property (25 point(s)) PAT甲级
  18. PC系统启动过程简介以及Windows引导修复
  19. 买了智能电视之后还需要购买搭配机顶盒吗?
  20. 华为认证发布3000元“考证奖励”后,又有啥新动作?

热门文章

  1. python cms api_python3 获取阿里云OSS 最新存储容量 SDK API
  2. matlab实验符号计算答案,2014秋实验四_MATLAB的符号计算二答案
  3. 联想a500手机驱动_一块砖也敢刷:联想手机A368T刷了三次才重新进入系统
  4. 对比Hashtable、HashMap、TreeMap有什么不同(转)
  5. python mongodb查询速度优化_Mongodb 3 查询优化(语句优化、建索引)
  6. java map 为空_java中如何判断map是否为空
  7. python selenium 下拉列表_Selenium+Python之下拉菜单的定位
  8. jsp人事管理系统_人事管理系统(论文+源码)(SSH+MYSQL+JSP+HTML5)
  9. Win32汇编——动态链接库
  10. Java 嵌入 SPL 轻松实现数据分组