【问题标题】:How to store and access data on eventBus in VueJS如何在 VueJS 中的 eventBus 上存储和访问数据
【发布时间】:2017-07-28 01:11:53
【问题描述】:

基本上我希望能够通过将 dataBus 设置为 vue 实例对象来访问一些集中的数据,然后从不同的组件访问和调整这些数据。

我似乎无法通过组件中的数据进行访问,即使是基本的字符串插值也没有呈现到 DOM。

  export const dataBus = new Vue({
    data: {
      numQuotes: 4,
      stringVar: 'Hellow There'
    }
  });

我还尝试将我的数据设置为函数 data() 的返回值。但是作为我的数据总线是一个实际的 vue 实例,我认为这是不正确的。 (我可能是错的)。以下是我导入 dataBus 并尝试输出数据的组件。

  <template>
    <div>
      <h1>Quotes Added</h1>
      <div id="trackerBar">
        <div id="trackerBarActual">
            <h2>{{numQuotes}}/10</h2>
        </div>
      </div>
    </div>

  </template>

  <script>
    import { dataBus } from '../main.js';

    export default{

    }
  </script>

我收到以下错误:属性或方法“numQuotes”未在实例上定义,但在渲染期间被引用。确保在 data 选项中声明响应式数据属性。

我是否遗漏了一些明显的东西?甚至可以通过这种方式访问​​数据吗?还是我必须将其作为一种方法访问?

【问题讨论】:

  • 您可能对vuex 感兴趣,用于集中状态维护
  • 我想你可能是对的,我还没有读到那一章。那么没有办法在 eventBus 上存储?

标签: javascript vue.js event-bus


【解决方案1】:

您缺少将data 分配给组件的部分。试试

<script>
import { dataBus } from '../main.js';

export default{
  data () {
    return dataBus.$data
  }
}
</script>

不过,您绝对应该查看 Vuex 进行状态管理。

【讨论】:

  • 这里是 Vue 文档对这种方法的描述:“每个组件实例都有自己的隔离范围。这意味着您不能(也不应该)直接引用子组件模板中的父数据。数据可以是使用道具传递给子组件。” vuejs.org/v2/guide/components.html#Passing-Data-with-Props
  • @Vladimir 这与父/子组件数据传递完全不同。 OP 想要从一个单独的 Vue 实例共享数据。
  • 数据仍然被引用,不应该这样使用。事件总线/数据总线是一个单独的 vue 实例,他应该通过 props 访问其中的数据。该视频教程应该会有所帮助:1. Vue JS 2 Tutorial #25 - The Event Bus, 2. COMPONENT COMMUNICATION (PROPS / EVENTS) | VueJS 2 | Learning the Basics
  • @Vladimir 给定事件/数据总线未安装,您打算如何使用道具?无论如何,OP遇到了问题,这就是答案。如果您认为他们应该采取不同的做法,也许您可​​以发布自己的答案,而不是投反对票
  • 也许你应该在开始拆解框架之前学习如何将发射器、事件和回调函数与 props 一起使用。如果文档说您不应该直接从另一个 vue 实例(在这种情况下为数据总线)引用 $data,那么您不应该这样做。原因可能很简单,它会破坏与 Vue 未来版本的兼容性。在没有 vuex 的情况下使用 props 是一件乏味的工作,但至少它是正确的。为了您的方便,我留下了两个教程,您可以从中学习如何做到这一点。
猜你喜欢
  • 2018-11-10
  • 2012-08-17
  • 2011-01-22
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多