设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

快应用的事件监听机制和组件间通信(6)

发布时间:2019-02-27 01:50 所属栏目:21 来源:王波
导读:另外一个兄弟组件可以通过父组件中建立相互引用达到相互持有ViewModel的目的,通过在生命周期onReady()中执行establishRef()实现,如下代码所示: template divclass=tutorial-page !--兄弟VM通信-- comp-part2id=s

另外一个兄弟组件可以通过父组件中建立相互引用达到相互持有ViewModel的目的,通过在生命周期onReady()中执行establishRef()实现,如下代码所示:

  1. <template>  
  2.   
  3. <div class="tutorial-page">  
  4.   
  5. <!-- 兄弟VM通信 -->  
  6.   
  7. <comp-part2 id="sibling1"></comp-part2>  
  8.   
  9. <comp-part3 id="sibling2"></comp-part3>  
  10.   
  11. </div>  
  12.   
  13. </template>  
  14.   
  15. <style lang="less">  
  16.   
  17. </style>  
  18.   
  19. <script>  
  20.   
  21. // 父组件  
  22.   
  23. export default {  
  24.   
  25. onReady () {  
  26.   
  27. this.establishRef()  
  28.   
  29. },  
  30.   
  31. /**  
  32.   
  33. * 建立相互VM的引用,父组件将两个兄弟组件联系了起来  
  34.   
  35. */  
  36.   
  37. establishRef () {  
  38.   
  39. const siblingVm1 = this.$vm('sibling1')  
  40.   
  41. const siblingVm2 = this.$vm('sibling2')  
  42.   
  43. siblingVm1.parentVm = this  
  44.   
  45. siblingVm1.nextVm = siblingVm2  
  46.   
  47. siblingVm2.parentVm = this  
  48.   
  49. siblingVm2.previousVm = siblingVm1  
  50.   
  51. }  
  52.   
  53. }  
  54.   
  55. </script>  

那么另外一个子组件的Pub端定义就很简单了,执行sendMesssage()即可完成触发,如下代码所示:

  1. <template>  
  2.   
  3. <div class="tutorial-page">  
  4.   
  5. <text class="tutorial-title">自定义组件3:</text>  
  6.   
  7. <text onclick="sendMesssage">点击发送消息</text>  
  8.   
  9. </div>  
  10.   
  11. </template>  
  12.   
  13. <style lang="less">  
  14.   
  15. </style>  
  16.   
  17. <script>  
  18.   
  19. // 子组件: part3  
  20.   
  21. export default {  
  22.   
  23. sendMesssage () {  
  24.   
  25. if (this.previousVm) {  
  26.   
  27. // Way1. 调用方法  
  28.   
  29. this.previousVm.processMessage('兄弟之间通信的消息内容')  
  30.   
  31. // Way2. 触发事件  
  32.   
  33. this.previousVm.$emit('customEventInVm2', '兄弟之间通信的消息内容')  
  34.   
  35. }  
  36.   
  37. }  
  38.   
  39. }  
  40.   
  41. </script>  

解释一下

通过上面的例子,我们可以看到,comp-part2和 comp-part3在父组件中通过nextVm和previousVm建立了‘兄弟关系’,基于此,它们之间可以直接调用对方的方法(如processMessage),或会通过$emit方法触发对方监听的事件'customEventInVm2'。

结尾

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读