$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

最新文章

  1. Basic linux command
  2. jquery 获取 json文件内容后,将其内容显示到 下拉列表框中,再将下拉列表中的内容,显示到文本框中
  3. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
  4. git学习笔记1
  5. 获取文件属性信息之stat、fstat和lstat
  6. UITableView优化技巧
  7. uva 12097 - Pie
  8. IOS科研IOS开发笔记学习基础知识
  9. Tomcat(.jsp)
  10. 用tortoiseGit管理GitHub项目代码(完整教程)
  11. day14- 面向对象基础(一)
  12. C++程序设计方法3:禁止自动类型转换
  13. Go语言学习笔记七: 函数
  14. C#窗口皮肤制作(二):创建窗口库项目以及最小化、最大化、关闭button的实现
  15. 神器 Tmux 的超绝便利
  16. Centos7更改yum源与更新系统
  17. Android之仿微信发朋友圈图片选择功能
  18. rancher下的kubernetes之三:在linux上安装kubectl工具
  19. 生产者-消费者模型-线程安全队列Queue
  20. Linux命令-更新系统时间和硬件时间

热门文章

  1. 使用session存储数据
  2. Ubuntu shell系统的环境变量
  3. nginx和php整合安装过程记录
  4. UOJ272. 【清华集训2016】石家庄的工人阶级队伍比较坚强 [FWT]
  5. word 新建一行文字不能左对齐
  6. Cayley-Hamilton定理与矩阵快速幂优化、常系数线性递推优化
  7. 在Android Studio中找不到AppCompatActivity解决方案
  8. SpringCloud:Ribbon负载均衡
  9. JavaScript substr() 方法
  10. 利用python的matplotlib处理计算数据