在类星体框架中存储全局对象的位置

Pav*_*lev 3 vue-component vuex vuejs2 quasar-framework

我正在使用基于Vue 的Quasar Framework重写我的旧应用程序,并且我有一段代码(类)封装了 websocket 功能。

这是一个相当简单的概念:用户在应用程序中从一个页面到另一个页面,但是如果他收到一条消息,他可以看到一条 toast 消息/回复或一个unread messages增量计数器。

我有点迷失在Quasar( Vue) 架构中,这是我的问题:

只要应用程序存在并可从任何地方访问,我将在哪里存储与外部世界通信的全局对象?

我阅读了Quasar( Vue) 的文档,但我仍然不知道把它放在哪里。Vuex 看起来不对,因为它不是应用程序的状态。它更像是一个匿名组件。

这是否意味着我应该使用插件或Vue.prototype全局混合或其他东西?

如果有人可以分享他们的经验和一段描述如何初始化和访问此对象方法的代码,我将不胜感激。

Neo*_*xn0 7

在我看来:

方法一、使用基于Vue原型的quasar插件(你肯定知道):

插件/foo.js

const fooModule = {
  a: 1,
  doTest() { console.log('doTest') }
};
export default ({Vue}) => {
  Vue.prototype.$foo = fooModule;
}
Run Code Online (Sandbox Code Playgroud)

类文件配置文件

plugins: [
  'i18n',
  'axios',
  'foo',
],
Run Code Online (Sandbox Code Playgroud)

组件bar.vue

methods: {
   test () { this.$foo.doTest() }
}
Run Code Online (Sandbox Code Playgroud)

方法 2. 直接使用 js 模块

因为 js 模块是单例的。无论您在何处导入 js 模块,它都指向同一个指针。

所以只要GlobalTest.js

export default {
  a: 1,
  inc() { this.a = this.a + 1 }
}
Run Code Online (Sandbox Code Playgroud)

和 test1.js:

import GlobalTest from '/path/to/GlobalTest'
console.log(GlobalTest.a); // output 1
console.log(GlobalTest.inc()); // inc
Run Code Online (Sandbox Code Playgroud)

和 test2.js:

import GlobalTest from '/path/to/GlobalTest'
console.log(GlobalTest.a); // Assuming this was called after test1.js: output 2
Run Code Online (Sandbox Code Playgroud)

我使用了类星体 cli,但我只是将类星体视为 UI 库。

- - 更新 - -

这是一个相当简单的概念:用户在应用程序中从页面到页面移动,但如果他收到一条消息,他可以看到一条吐司消息/回复或未读消息的计数器递增。

取决于要求,如果您需要“反应式”,则应使用 Vuex(最佳内置反应式库)+ 将应用程序状态拆分为模块,但我仅在需要“反应式”时才使用 Vuex,并在需要时避免使用它读取和写入值。