码迷,mamicode.com
首页 > 其他好文 > 详细

vue中的$attrs和$listener简介

时间:2019-08-20 00:54:19      阅读:829      评论:0      收藏:0      [点我收藏+]

标签:message   turn   作用   fat   通过   class   不包含   log   temp   

Vue中的$attrs和$listener

大家在组件开发中肯定遇到过父组件需要向子组件传递数据和事件的问题,以往我们是这样解决的:

父组件代码:

 1 <template>
 2   <div id="father">
 3     <child :tempdata="temp" @fatherFn="tempFn"><child>    
 4   </div>    
 5 </template>
 6 <script>
 7 export default {
 8   data() {
 9     temp: click here!
10   },
11   method: {
12     tempFn: function(message) {
13       console.log(message);
14     }
15   }
16 }
17 </script>

子组件代码:

 1 <template>
 2   <div id="child">
 3     <span @click="childClick(message)">{{ tempdata }}</span>
 4   </div>
 5 </template>
 6 <script>
 7 export default {
 8   props: {
 9     tempdata: {
10       type: String,
11       default: ‘‘
12     }
13   },
14   data() {
15     return {
16       message: i am child
17     }
18   },
19   methods: {
20     childClick: function(message) {
21       this.$emit(fatherFn, message);
22     } 
23   }
24 }
25 </script>

这样我们完成了从父组件传递数据已经方法到子组件,但是如果是向子组件的子组件传递信息呢?显然我们需要换一种更加简单的方式实现祖孙组件之间的数据传输,小二上代码:

 1 // father组件
 2 <template>
 3   <div id="father">
 4     <child :temp="tempdata" @tempFn="fatherFn" :prop=‘$attrs不会传递prop 
 5      值‘>
 6     </child>
 7   </div>
 8 </template>
 9 <script>
10 import Child from ./child
11 export default {
12    component: { Child },
13   data() {
14     tempdata: i am father
15   },
16   methods: {
17     fatherFn: function() {
18       console.log(father function!);
19     }
20   }
21 }
22 </script>
23 
24 // child组件
25 <template>
26   <div id="child">
27     <son v-bind="$attrs" v-on="$listener"></son>
28   </div>
29 </template>
30 <script>
31 import Son from ./son
32 export default {
33   component: {Son},
34   props: { prop },
35   data() {
36     return {}
37   },
38   mounted() {
39     // 结果显示为$attrs.temp,不包含prop
40     console.log(this.$attrs)
41     this.$emit(tempFn)
42   },
43   methods: {}
44 }
45 </script>
46 
47 // son组件
48 <template>
49   <div id="son">
50     {{ $attrs.temp }}
51   </div>
52 </template>
53 <script>
54 export default {
55   prop: {},
56   data() {
57     return {}
58   },
59   mounted() {
60     this.$emit(tempFn)
61   },
62   methods: {}
63 }
64 </script>

综上,可知:

$listeners包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器,它可以通过 v-on=”$listeners” 传入内部组件。

$attrs包含了父作用域中非props 特性绑定的属性 (class 和 style 除外)。当一个组件没有声明任何 props 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind=”$attrs” 传入内部组件。

 

vue中的$attrs和$listener简介

标签:message   turn   作用   fat   通过   class   不包含   log   temp   

原文地址:https://www.cnblogs.com/lsboom/p/11365293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!