Vue v2.4中新增的attrs及听众美元属性使用教程

  

前言

  

多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。如果仅仅是传递数据,而不做中间处理,使用vuex处理,未免有点杀鸡用牛刀.Vue 2.4版本提供了另一种方法,使用v-bind=" $ attrs ",将父组件中不被认为道具特性绑定的属性传入子组件中,通常配合interitAttrs选项一起使用。之所以要提到这两个属性,是因为两者的出现使得组件之间跨组件的通信在不依赖vuex和事件总线的情况下变得简洁,业务清晰。

  

<强>首先分析以下应用场景:

  

 Vue v2.4中新增的attrs及听众美元属性使用教程

  

一组件与B组件之间的通信:(父子组件)

  

如上图所示,A, B, C三个组件依次嵌套,按照Vue的开发习惯,父子组件通信可以通过以下方式实现:

  
      <李> A到B通过道具的方式向子组件传递,B,通过在B组件中释放美元,一组件中v的方式实现李   <李>通过设置全局Vuex共享状态,通过计算计算属性和提交突变的方式实现数据的获取和更新,以达到父子组件通信的目的。   <李> Vue事件总线,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递。   
  

往往数据在不需要全局的情况而仅仅是父子组件通信时,使用第一种方式即可满足。

  

一组件与C组件之间的通信:(跨多级的组件嵌套关系)

  

如上图,一个组件与C组件之间属于跨多级的组件嵌套关系,以往两者之间如需实现通信,往往通过以下方式实现:

  
      <李>借助B组件的中转,从上到下道具依次传递,从下至上,美元发出事件的传递,达到跨级组件通信的效果李   <李>借助Vuex的全局状态共享李   <李> Vue事件总线,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递。   
  

很显然,第一种通过道具和美元发出的方式,使得组件之间的业务逻辑臃肿不堪,B组件在其中仅仅充当的是一个中转站的作用,如使用第二种Vuex的方式,某些情况下似乎又有点大材小用的意味,(仅仅是想实现组件之间的一个数据传递,并非数据共享的概念)。第三种情况的使用在实际的项目操作中发现,如不能实现很好的事件监听与发布的管理,往往容易导致数据流的混乱,在多人协作的项目中,不利于项目的维护。

  

$ attrs以美元及听众的出现解决的就是第一种情况的问题,B组件在其中传递道具以及事件的过程中,不必在写多余的代码,仅仅是将$ attrs以美元及听众向上或者向下传递即可。

  

示例代码

  

如下所示:

  

一组件(App.vue)

        & lt; template>   & lt; div id=坝τ谩北?   & lt; child1   " child1 ": p-child1=:p-child2=" child2”   v: test1=" onTest1 "//此处监听了两个事件,可以在B组件或者C组件中直接触发   v: test2=皁nTest2”比;   & lt;/child1>   & lt;/div>   & lt;/template>   & lt; script>   从“进口Child1。/Child1.vue ';   出口默认{   数据(){   返回{};   },   组件:{Child1},   方法:{>   & lt; template>   & lt; div类=癱hild-1”比;   & lt; p> child1: & lt;/p>   & lt; p>道具:{{pChild1}} & lt;/p>   & lt; p> $ attrs: {{$ attrs}} & lt;/p>   & lt; hr>   & lt; !——C组件中能直接触发测试的原因在于B组件调用C组件时使用v绑定了美元听众属性——比;   & lt; !——通过v-bind绑定$ attrs属性,C组件可以直接获取到一个组件中传递下来的道具(除了B组件中道具声明的)——比;   & lt; child2 v-bind=" $ attrs " v=" $听众"祝辞& lt;/child2>   & lt;/div>   & lt;/template>   & lt; script>   从“进口Child2。/Child2.vue ';   出口默认{   道具:[' pChild1 '),   数据(){   返回{};   },   inheritAttrs:假的,   组件:{Child2},   安装(){   美元。排放(test1);   }   };   & lt;/script>      

结果:   在child1

:

  

道具:v_child1   

$ attrs: {“p-child2”:“v_child2”}

  

C组件(Child2.vue)

        & lt; template>   & lt; div类=癱hild-2”比;   & lt; p> child2: & lt;/p>   & lt; p>道具:{{pChild2}} & lt;/p>   & lt; p> $ attrs: {{$ attrs}} & lt;/p>   & lt; hr>   & lt;/div>   & lt;/template>   & lt; script>   出口默认{   道具:[' pChild2 '),   数据(){   返回{};   },   inheritAttrs:假的,   安装(){   美元。排放(test2);   }   };   & lt;/script>

Vue v2.4中新增的attrs及听众美元属性使用教程