Vue.js 如何避免在多个JavaScript文件中访问vue实例?
序言-虽然有一篇文章提到了类似的问题,但推荐的解决方案涉及将vue实例附加到窗口,以便在多个javascript文件中访问它,这似乎是一个糟糕的设计 我的应用程序中有以下高度简化的基本结构:Vue.js 如何避免在多个JavaScript文件中访问vue实例?,vue.js,vuejs2,Vue.js,Vuejs2,序言-虽然有一篇文章提到了类似的问题,但推荐的解决方案涉及将vue实例附加到窗口,以便在多个javascript文件中访问它,这似乎是一个糟糕的设计 我的应用程序中有以下高度简化的基本结构: vm=新的Vue({ el:#vue应用程序“, 数据:{ 信息:[], complexTaskInProgress:false }, 方法:{ 按钮点击:函数(){ complexTaskInProgress=true //从另一个文件导入的方法 等待complexTask() complexTaskIn
vm=新的Vue({
el:#vue应用程序“,
数据:{
信息:[],
complexTaskInProgress:false
},
方法:{
按钮点击:函数(){
complexTaskInProgress=true
//从另一个文件导入的方法
等待complexTask()
complexTaskInProgress=false
}
}
})
问题是complexTask
需要不断向消息列表添加值
例如-complexTask
可能需要20秒来执行,并每隔2秒向消息添加一个值。我不能只等待20秒执行complexTask
,然后返回消息的新值,我需要与complexTask
同步更新消息
(也就是说,只要complexTask
更新消息
,更改就应该反映在我的网站上)
但是,执行上述操作需要从complexTask
中访问vm
,这是不可能的,除非我将vm
附加到浏览器的窗口
对象
让complexTask
更新消息列表的正确方法是什么 这取决于complexTask
如何更改消息
如果替换消息->只需返回新消息并更新Vue组件数据:
按钮点击:函数(){
this.complexTaskInProgress=true
//从另一个文件导入的方法
this.messages=wait complexTask()
complexTaskInProgress=false
}
如果它修改消息(添加、更新、删除对象),则只在函数中显示当前消息,并返回更新消息的数组:
按钮点击:函数(){
this.complexTaskInProgress=true
//`complexTask`复制原始消息数组并返回它,其中包含所有需要修改的内容
this.messages=wait complexTask(this.messages);
complexTaskInProgress=false
}
顺便说一句,这可以通过自定义Vuex插件解决
使用状态管理器(Vuex/Redux/etc)。在这种情况下,整个应用程序只有一个状态树(单一真实来源)。例如,您可以编写自定义Vuex插件来解决此问题。它可以访问当前状态,并可以在需要时运行突变/操作。了解更多有关此的信息
使用共享状态。在这种情况下,您将只传递共享状态,而不是整个组件实例,因此开销要低得多。而且,与使用状态管理器相比,它的实现更简单 是时候用一些东西来提升你的状态了:vuex
,redux
,恐怕我不是很清楚。我需要不断更新消息
。我用一个例子更新了我的帖子。看起来你需要州经理。自定义vuex插件可以随时访问状态,并在需要时调用操作/变体needed@Roymunson更新。添加了有关状态管理器和共享状态的信息