【问题标题】:Open Vue dialog(modal) on parent在父级上打开 Vue 对话框(模态)
【发布时间】:2018-12-28 03:13:02
【问题描述】:

首先,我已经阅读了this 的帖子,但它对我没有帮助(或者我无法解决)

我有一个组件,它是 Vuetify 模态 (ModalTurno.vue)。 我正在尝试从底部导航 (bottomNav.Vue) (也是一个组件)中的按钮打开它。

我什至能够做到这一点!但它会在底部导航 div 中打开。所以我想在我的主 vue (Turno.Vue) 上打开它,这样我就可以看到整个模式。这让我发疯了

Vuetify 模态(ModalTurno.Vue):

    <template>
    <v-dialog v-model="dialog" persistent max-width="500px" >
      <v-card>
        <v-card-title>
          <span class="headline">User Profile</span>
        </v-card-title>
      </v-card>
    </v-dialog>
</template>

<script>
  export default {
    data: () => ({
      dialog: false
    })
   }
</script>

底部导航(bottomNav.Vue)(按钮所在的位置):

 <template>
  <v-card height="200px" flat>
    <v-bottom-nav
      :value="true"
      color="indigo"
      fixed
    >
       <v-btn
        dark
        flat
        value="favorites">
          <span>Agregar turno</span>
          <v-icon>add_circle</v-icon>
      </v-btn> <!--THIS IS THE BUTTON TO OPEN THE DIALOG -->

    </v-bottom-nav>
  </v-card>
</template>

<script>
export default {
  name: 'header',
  data () {
      return {
          bottomNav: 'recent'
      }
  }
}
</script>

Turno.Vue(应该显示模态框的位置):

<template>
  <div>
    <bottomNav> </bottomNav>

    <modalTurno>  </modalTurno>
  </div>
</template>

<script>
import bottomNav from "./components/bottomNav.vue";
import modalTurno from "./components/ModalTurno.vue";

export default {
  name: 'turno',
  components: {
    bottomNav,
    modalTurno 
  }
}
</script>

感谢所有花时间阅读这篇文章的人!

【问题讨论】:

  • 也许我误解了这个问题 - 您是否希望组件 A 有一个按钮来触发组件 B 中的模式?那是对的吗?或者这是某种布局问题?
  • @rob 我有 2 个组件和 1 个父(C)组件 A 是一个模态组件 B 有一个按钮。我想在 B 中触发 btn 后在 C 中显示 A
  • @Aldarund 这有点不同,不过,它对我很有用。谢谢!

标签: javascript vue.js vuejs2 vue-component vuetify.js


【解决方案1】:

你可以这样做:

Turno.vue

bottomNav.Vue

  • 将 @click="$parent.$refs.modalTurno.dialog = true" 添加到 v-btn(这将更新 modalTurno 中的对话框)

【讨论】:

  • 谢谢!有用!。我认为这是交流兄弟组件的最简单方法。至少我知道的那个:)
  • @Natarr 这样做太丑了:) 最好使用 vuex 商店或 eventbus
  • 如果您经常使用此类功能,请考虑创建全局事件总线。做起来非常简单,并且允许您在整个代码中的一个地方发出和监听事件。我强烈推荐它:alligator.io/vuejs/global-event-bus.
  • @rob 感谢您的评论。我尝试使用事件总线,但我不知道在 Turno.vue 中将侦听器放在哪里以及如何显示 ModalTurno。我很容易对 vue 语法感到困惑
  • Aldarund & rob 是对的,如果你有一次这种情况,你可以使用我的例子,如果你需要从很多地方打开对话框,最好使用事件总线
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2021-09-22
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多