首页 > 解决方案 > Vuex 返回布尔值?

问题描述

我正在尝试创建一个可以在名为 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") 那样简单地调用它,然后根据响应进行展示。但是我很难做到这一点。希望您能提供任何建议给 :)

标签: vue.jsvuex

解决方案


你可以制作hasPermission一个方法风格的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 那样被缓存,但动作也不是。

这是一个演示


推荐阅读