【问题标题】:Vuex Return boolean?Vuex 返回布尔值?
【发布时间】:2020-07-29 05:15:15
【问题描述】:

我正在尝试创建一个函数,我可以在我的模板中调用一个名为 hasPermission 的字符串。但是,当我调用它时,vuex 返回一个 promise 对象。无论如何我可以让它返回一个布尔值吗?

hasPermission({ state }, permission) {
  for (var i = 0; i < state.user.permissions.length; i++) {
    var perm = state.user.permissions[i];
    if (perm.name == permission) {
      return true;
    }
  }
  return false;
}

我希望能够像 v-if="hasPermission("test") 那样简单地调用它,然后根据响应显示出来。但是我很难做到这一点。希望任何你可以给建议:)

【问题讨论】:

  • 您可以使用Promise.resolve(true)Promise.reject(false。 Vuex 不应该返回一个 promise 对象,除非你试图直接从 dispatch 调用中读取。
  • 那会返回 Promise.resolve(true) 吗?上述功能也在行动中。 @UtsavPatel
  • 如果是一个动作,那么你应该 commit 到 vuex 存储并从 mapStatemapGetters 读取值。
  • 那么我将如何检查一个值是否在这样的数组中?有没有办法用 Vuex 完成上述功能?
  • 您正在调度一个名为hasPermission 的操作,它接受一个名为permission 的参数。所以你会知道permission 是否是一个数组。

标签: vue.js vuex


【解决方案1】:

您可以将hasPermission 设为method-style getter:

getters: {
  hasPermission: (state) => (permission) => {
    for (var i = 0; i < state.user.permissions.length; i++) {
      var perm = state.user.permissions[i];
      if (perm.name == permission) {
        return true;
      }
    }
    return false;
  }
}

使用mapGetters 将其包含在组件中:

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

在模板中使用它:

v-if="hasPermission('test')"

请记住,这些 getter 不像普通的 getter 那样被缓存,但动作也不是。

这是demo

【讨论】:

  • 我认为在OP中hasPermission实际上是一个动作。
  • @UtsavPatel - 是的,不需要。
  • 这正是我正在寻找的东西!谢谢!我是 vue 和 vuex 的新手,我想我需要多研究一下 vuex 哈哈。
猜你喜欢
  • 2013-08-18
  • 2011-12-14
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2012-05-10
  • 2018-08-22
相关资源
最近更新 更多