【问题标题】:Deconstructing or pre-filtering data in a computed property in Vuejs在 Vuejs 中解构或预过滤计算属性中的数据
【发布时间】:2020-05-17 12:38:36
【问题描述】:

我需要根据用户是否活跃列出一个用户列表。我知道我可以将嵌套 div 中的 v-for 和 v-if 分开,但由于 html 的构造,我不能。我也需要这个用于分页目的。

所以我的 API 包含了数千个用户(一些活跃的真和同样活跃的假)

对于活动的模板,我的模板如下所示:

<div v-if="filterformData.filterby === 'Active Operators'">
  <div v-for="(user, key) in operators" :key="key" v-if="user.active">
    User Name: {{user.name}}
    User ID: {{user.id}}
    ...
  </div>
</div>

注意:第一个 v-if 它正在检查名称 Active Operators 的下拉选择选项。那在我的数据对象中。

我的脚本相关行如下所示

computed: {
   ...mapGetters("users", ["operators"])
},
methods: {
   ...mapActions("users", ["getUsers"])
}
created() {
  this.getUsers();
}

我的商店相关行如下所示:

import { axiosInstance } from "boot/axios";

export default {
  namespaced: true,
  state: {
    operators: []
  },
  getters: {
    operators: state => {
      return state.operators;
    }
  },
  actions: {
    async getUsers({ commit }) {
       const response = await axiosInstance.get("operator");
       commit("setUsers", response.data.data);
    }
  },
  mutations: {
    setUsers: (state, operators) => (state.operators = operators)
  }
};

再次,我想将活动用户包含在一个可用于循环的计算属性中。最终,我也会为非活跃用户制作另一个

谢谢

【问题讨论】:

  • 不推荐在同一个元素上使用v-forv-if。看看here。为避免这种情况,您可以简单地创建一个computed property,在其中过滤所有活动用户,然后通过该数组循环。
  • @Matthias 你没说!!!这正是我所要求的大声笑
  • 好的,我发布了答案。

标签: javascript vue.js vuex


【解决方案1】:

只需像这样在计算属性中过滤活跃用户

computed: {
    ...

    activeUsers() {
        return this.operators.filter(user => user.active)
    }
},

并将v-for 指令更改为此

<div v-for="(user, key) in activeUsers" :key="key">

它应该在没有v-forv-if 的情况下在同一个元素上工作。

【讨论】:

  • 谢谢!这就是我想要的。出于某种原因,我仍然不知道如何将状态从商店传递给组件。但我快到了。再次感谢
猜你喜欢
  • 2020-01-23
  • 2017-11-03
  • 1970-01-01
  • 2017-08-23
  • 2015-02-26
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
相关资源
最近更新 更多