vue.js - 从 Quasar 框架 VueJS 中的另一个组件打开抽屉

标签 vue.js frontend quasar

我是前端开发新手,开始使用基于VueJS的Quasar。

问题是如何从另一个组件打开抽屉?现在我有选择一个 DOM 元素并对其调用 open() 的解决方案,但我认为这不是最好的。

代码是this.$parent.$children[2].$refs.leftDrawer

组件 Drawer.Vue 内容是一个抽屉标签,其引用如下:

<q-drawer ref="leftDrawer">
....
</q-drawer>

组件 headerbox.vue 内容为:

<template>
...
<button class="hide-on-drawer-visible" @click="leftDrawer.open()">
...
</template>
<script>
...
    computed: {
      leftDrawer () {
        return (this.$parent.$children[2].$refs.leftDrawer)
      }
...
</script>

MainApp Vue 内容:

<template>
 <q-layout>
 <headerbox slot="header"></headerbox>
 <drawer></drawer>
 ...
</q-layout>
</template>

<script>
  ...
  import headerbox from './header.vue'
  import drawer from './drawer.vue'
  ...
  components: {
    headerbox,
    drawer,
    }
  ...
</script>

最佳答案

最好的选择是在消息泵上使用事件。

在 main.js 中添加一行

...
window.MessagePump = new Vue()
...

然后在有抽屉的组件中:

...
mounted () {
    window.MessagePump.$on(
        'openLeftDrawer',
        () => {
          this.$refs.leftDrawer.open()
        }
    )
}
...

以及任何需要打开抽屉的组件

...
window.MessagePump.$emit('openLeftDrawer')
...

实际上,您可以从两个调用中删除 window.,但这取决于您的个人喜好。

关于vue.js - 从 Quasar 框架 VueJS 中的另一个组件打开抽屉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990130/

相关文章:

css - HTML 显示不正确? (laravel-dompdf 包)

macos - Quasar Electron版本无法在具有arm64架构的M1 Mac mini上运行

javascript - Vue.js 通过基于条件的方法设置类

webpack - 如何在最新的 vue-cli 启动项目中使用 SASS/SCSS?

javascript - Data 中的属性在methods() 方法中未定义

javascript - 在 dom 元素中调用事件处理程序

javascript - webpack开发服务器不是在内存中生成bundle.js吗?

sockets - Quasar 应用程序路由问题

vue.js - "v-on with no argument expects an object value"当焦点进入视野时,类星体选择器中面临此错误

javascript - 在另一个属性中引用元素属性