代码之家  ›  专栏  ›  技术社区  ›  Ruudjah

获取对Vue路由器链接组件的引用

  •  0
  • Ruudjah  · 技术社区  · 6 年前

    我有一个组件

    <router-link to="page"></router-link>
    <router-view></router-view>
    

    在链接链接指向的页面组件中,我触发了一个事件。持有链接的组件需要订阅该事件。如何获取对页组件的引用并订阅其事件?因为我没有明确声明 <page></page> 在保持 <router-link> router-view 我不能用普通的 @event 语法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   kylewelsby    6 年前

    您将要使用 $root $emit 一个事件并倾听 $on 也是。

    在你的应用程序中的任何地方简单使用;

    this.$root.$emit('myCustomEvent', 'hello world')
    
    /* somewhere else in your app */
    this.$root.$on('myCustomEvent', (msg) => {
      /* handle the custom event */
      console.log(msg)
    })
    

    完整示例

    <!-- src/App.vue -->
    <template lang="html">
      <div>
        <router-link to="page">Go to Page</router-link>
        <router-view></router-view>
      </div>
    </template>
    <script>
      export default {
        name: 'app',
        mounted () {
          this.$root.$on('pageEvent', handlePageEvent)
        },
        beforeDestroy () {
          // make sure you cleanup the event
          this.$root.$off('pageEvent', handlePageEvent)
        },
        methods: {
          handlePageEvent (ev) {
            console.log('you clicked me from within')
          }
        }
      }
    </script>
    
    <!-- src/Page.vue -->
    <template>
      <div>
        <a @click="$root.$emit('pageEvent')">Click Me</a>
      </div>
    </template>