Динамические модули и пространства имен не зарегистрированы (vuex-module-decorators, vuex-class) - PullRequest
0 голосов
/ 02 апреля 2019

Модуль не зарегистрирован:

$nuxt.$store._modulesNamespaceMap // No properties

Кроме того, я получаю это предупреждение:

Classic mode for store/ is deprecated and will be removed in Nuxt 3.

Что я пробовал:

  1. загрузка модуля вручную, чтобы увидеть, работает ли пространство имен (FAIL).
  2. Попробуйте без пространства имен динамически загрузить модуль (FAIL).

Код:

// @/store/modules/User.ts
import { Module, VuexModule, Mutation, Action } from "vuex-module-decorators";
import { firebase, auth, GoogleProvider, StoreDB } from "@/services/fireinit";
import { IUser } from "~/types/user";
import { store } from "..";

// It seems like the "store" is messed somehow
@Module({ dynamic: true, namespaced: true, store: store, name: "user" })
export default class User extends VuexModule {
  user: IUser = null;

  @Action
  async autoSignIn(user: IUser) {
    this.context.commit("setUser", user);
  }

  @Action
  async signInWithGoogle() {
    return new Promise(resolve => {
      console.log("signInWithGoogle:", this);
      auth.signInWithRedirect(GoogleProvider);
      resolve();
    });
  }

  // trunked ...
}
// @/store/index.ts
import Vuex, { Store } from "vuex";
import User from "./modules/User";

// trunked ...

// Declare empty store first
export const store = new Vuex.Store<IStoreType>({});

const createStore = () => store;

export default createStore;
// @/pages/login.vue

// trunked ...

const User = namespace('user'); // [vuex] module namespace not found in mapActions(): user/

@Component({})
export default class LoginComponent extends Vue {
  @User.State("activeUser") stateUser;
  @User.Action("signInWithGoogle") actionSignInWithGoogle;
}

Дерево:

├── pages
│   └── login.vue
├── store
│   ├── index.ts
│   └── modules
│       └── User.ts

Я ожидаю, что смогу динамически загружать модули с пространством имен ...

Я перепробовал все, что мог найти в миреИнтернет, но я не могу заставить его работать.

Что я делаю не так?

1 Ответ

0 голосов
/ 02 апреля 2019

Хорошо, я нашел способ, который работает ...

Код:

// @/store/index.ts
import Vuex, { Store } from "vuex";
import User from "./modules/User";

// trunked ...

// Declare empty store first
export const store = new Vuex.Store<IStoreType>({});
// No more "createStore" shit.
// @/pages/login.vue

// trunked ...

const User = namespace('modules/User/'); // "modules/" is important to make it work.

@Component({})
export default class LoginComponent extends Vue {
  @User.State("activeUser") stateUser;
  @User.Action("signInWithGoogle") actionSignInWithGoogle;
}
...