User.js个类和用户对象(user = new User();).

user对象正在所有嵌套组件中使用.User课有很多重要的方法.

如何在任何组件中简单地使用/访问this.userthis.$user及其方法?

1-solution(临时工作解决方案):在vuex的store中设置user,并在所有组件的data中定义:

data(){
  return {
    user:this.$store.state.user
  }
}

缺点:在每个组件中,都应该添加这一点.注意:组件太多了.

2-solution:将用户添加到Vue的prototype类插件:

Vue.prototype.$user = user

缺点:当user的数据发生变化时,它不会出现在DOM元素(UI)中.

3-solution:把组件放到props.

缺点:在每个组件中,都应该添加这一点.注意:还有很多组件.

我发现的所有解决方案都有问题,尤其是随着项目越来越大.

任何建议和解决方案将不胜感激!

推荐答案

注:适用于Vue 2x

建议1:使用vuex的getter

  • You could use getters along with mapGetters from Vuex to include users within computed properties for each 组成部分.

Vuex

getters: {
  // ...
  getUser: (state, getters) => {
    return getters.user
  }
}

组成部分

import { mapGetters } from 'vuex'
computed: {
  ...mapGetters([getUser])
}

建议2:通过插件添加观察者

Vue

// When using CommonJS via Browserify or Webpack
const Vue = require('vue')
const UserPlug = require('./user-watcher-plugin')

// Don't forget to call this
Vue.use(UserPlug)

用户观察插件.js

const UserPlug = {
  install(Vue, options) {
    // We call Vue.mixin() here to inject functionality into all 组成部分s.

    Vue.watch: 'user'
  }
};

export default UserPlug;

Proposal 3: add a computed property user as plugin via mixin

Vue

// When using CommonJS via Browserify or Webpack
const Vue = require('vue')
const UserPlug = require('./user-watcher-plugin')

// Don't forget to call this
Vue.use(UserPlug)

用户观察插件.js

const UserPlug = {
  install(Vue, options) {
    // We call Vue.mixin() here to inject functionality into all 组成部分s.

    Vue.mixin({
      computed: {
        user: function() {
          return this.$store.state.user
        }
      }
    })
  }
};

export default UserPlug;

Vue.js相关问答推荐

为什么普通对象在 Vue3 中自动变成响应式的?

Vue 和 Nuxt 之间生命周期钩子的不同行为

已分配计算(computed)属性,但它没有设置器

Vue + Webpack 构建显示空白页面

Vue3在'vue-router'中找不到导出'createWebHistory,createRouter'

为什么不先移动鼠标就无法滚动视差?

如何为 Vue 项目设置 lint-staged?

Vuex - 如何跨不同选项卡持久存储更新?

如果我观看解构的props,Vue 3 手表将无法正常工作

Vue Prop 没有初始化器,也没有在构造函数中明确赋值

Vue 如何使用 slot 和 slot-props 测试组件

在手动安装的 vue 组件中使用 vuex

在vue中单击时如何模糊元素

Vuejs获取事件正在调用的元素?

更改事件上的 Select2 在 Vuejs 中不起作用

NPM:403 禁止 - PUT http://registry.npmjs.org/[package-name] - 禁止

Vuejs 不会在 HTML 表格元素中呈现组件

Vue组件如何命名

如何访问通用 javascript 模块中的当前路由元字段

为什么 router.currentRoute.path 没有react?