【问题标题】:How to access data from outside the instance in Vue js?如何从 Vue js 中的实例外部访问数据?
【发布时间】:2026-01-30 08:45:01
【问题描述】:

我想像这样从实例外部访问 vm 数据:

myComponent.vue

export default {
    data() {
        return {
            name: 'Joe'
        };
    }
}

ma​​in.js

var vm = new Vue({
    el: '#app',
    render: h => h(myComponent)
});

期望的结果

console.log(vm.name);   // should return - Joe

由于某种原因,控制台返回未定义。我做错了什么?

【问题讨论】:

  • 补充一下,如果我使用console.log(vm),它会返回一个包含所有参数的对象就好了。但是对象 $data: (...) 参数内部没有任何数据
  • vm.name 是根组件的数据,而不是myApp.vue 组件。
  • 那么如何从 main.js 访问 myApp.vue 组件?
  • 目前如何导入myApp.vue并使用它?
  • 在 main.js 中:从 './myApp' 导入 myApp;然后在上面的例子中使用它

标签: vuejs2 vue-cli


【解决方案1】:

要从内部访问 vue.js 对象数据,您可以使用 $property_name。示例

var vm = new Vue({
    el: '#app',
    data() {
      return {
        name: "Kapucni",
      }
    },
  template: '<div>{{ name }}</div>'
});

// use $name .property
console.log(vm.$data.name);
console.log(vm.$el);
// calling functions from $method, etc ...
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js"></script>

<div id='app'>
  
</div>

【讨论】:

  • 嗯...由于某种原因,这对我也不起作用。我正在使用 vue-cli 和 webpack,可能在这种环境中某些行为有所不同... $data 对象不返回任何内容
  • 也许将您的带有设置的最小项目上传到代码和框
  • 例如从我的 Nuxt + Vue 项目中的控制台我可以访问像app.__vue__.$root.$data 这样的数据,其中$root 是我的组件名称
  • 感谢 - 我正在通过脚本使用 vue,但由于某种原因在 axios catch 块中丢失了 vue 上下文
【解决方案2】:

感谢 ittus 的 cmets,我意识到我必须寻找子组件,而不是根组件。

我们可以像这样访问子组件:

vm.$children[0].name

其中 $children[0] 是根组件的直接(在这种情况下也是第一个)子组件。

【讨论】: