Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将Vue实例保存在变量或常量中?_Javascript_Vue.js_Object_Instance - Fatal编程技术网

Javascript 为什么要将Vue实例保存在变量或常量中?

Javascript 为什么要将Vue实例保存在变量或常量中?,javascript,vue.js,object,instance,Javascript,Vue.js,Object,Instance,我是Vue的新手。我在大多数教程和文档中都看到,新Vue实例保存在应用程序或任何命名常量中。我想知道如何在变量或常量中保存Vue实例 const app = new Vue({ el: "#app", components: {}, methods: {} // options }) 这取决于您的用例 一个原因可能是您已经在生产中部署了一个应用程序。您可能只想将Vue.js添加到应用程序的某些部分。您甚至可能在同一页面上有多个vue实例,因此保存对它们的引用是有意义的 另一个原

我是Vue的新手。我在大多数教程和文档中都看到,
新Vue
实例保存在
应用程序
或任何命名常量中。我想知道如何在变量或常量中保存Vue实例

const app = new Vue({
  el: "#app",
  components: {},
  methods: {}
  // options
})

这取决于您的用例

一个原因可能是您已经在生产中部署了一个应用程序。您可能只想将Vue.js添加到应用程序的某些部分。您甚至可能在同一页面上有多个vue实例,因此保存对它们的引用是有意义的

另一个原因是使用全局事件总线。实现此功能时,您将保存对新Vue组件的引用。与此类似:


Vue.prototype.$eventBus=new Vue()

我想我有一个用例。我想这也澄清了我的问题

请注意,我们不能在选项属性或回调上使用箭头函数,例如
created:()=>console.log(this.a)
vm.$watch('a',newValue=>this.myMethod())
。 由于箭头函数没有
this
this
将被视为任何其他变量,并通过父作用域进行词汇查找,直到找到为止,通常会导致以下错误:
uncaughttypeerror:无法读取未定义或未捕获TypeError的属性:this.myMethod不是函数。

但是,如果我们使用带有data属性的arrow函数,这将不是组件的实例,但我们仍然可以访问该实例作为函数的第一个参数:

var data = { a: 1 }

// direct instance creation
var vm = new Vue({
  data: data
})
vm.a // => 1
vm.$data === data // => true

// must use function when in Vue.extend()
var Component = Vue.extend({
  data: vm => ({ a: vm.myProp })
})
但这不是常见的做法。我们通常将组件中的数据属性声明为函数,以便直接访问vue实例

// must use function when in Vue.extend()
var Component = Vue.extend({
  data: function () {
    return { a: 1 }
  }
})

如果你从未使用过
app
变量,那就没有必要了。我明白你的意思,关于他们网站上的许多vue文档,但即使在本文()中,也有一些有(并使用过)变量,但至少有一个版本没有。因此,文档中的案例有它,但没有演示它的用法,可能只是制作这些文章的开发人员的个人编码实践。是的,没错。我看到每个人都将Vue实例存储在应用程序常量中,并且从未再次引用它们。我知道这没必要。然后我再次寻找用例,如果它们有。否则,为什么它们会出现在vuejs文档中呢?好吧,关于“寻找用例(如果有的话)”,这篇文章有点感谢Taplar的评论。但是,我已经阅读了该文档。我认为在该文档中,
vm
变量用于阐明Vue实例是如何工作的。但我没有找到任何真正的用法,这就是我的问题所在。为什么在我所看到的每一个教程和项目中都这样声明?有什么真正的用法吗?谢谢你的评论。这是有道理的。但是,在同一页面上有多个vue实例时,如何将vue实例保存在变量中会有所帮助。因为Vue实例是基于
el
属性加载的。我实际上正在处理一个有多个Vue实例的项目。所以一点澄清会有所帮助。这在很大程度上取决于您的用例。我能想到的一个原因是向所有实例发送消息。对于这一点,您需要有一个对所有它们的引用才能在每一个上运行emit。谢谢。我一定会尝试测试它。