使用 Vue.js 中的方法过滤计算 属性 的数组

Filter array of a computed property using a method in Vue.js

我希望这不是一个愚蠢的问题。我有一个计算的 属性,其中列出了 ALL 课程。当用户单击调用名为 courseFilters() 的方法的按钮时,我想将计算的 属性 过滤为 显示未存档的课程。

这是我计算的 属性:

filterCourses() {
            const getUser = this.$store.getters['UserData/getUser']
            
            return this.courses.filter((item) => {
                if(this.checkAuthorization(['leader'])) {
                    return item.createdBy === getUser.uid
                } else {
                    return item
                }
            })
        }

这是我的方法:

courseFilters(which) {
        if(which == 'hide-archived') {
            this.filterCourses.filter((item) => {
                if(!item.archive) {
                    return item
                }
            })
        }
        if(which == 'clear') {
            this.getCourses(this.$store.getters['AppData/cid'])
        }
    }

目前,当我点击按钮时,计算结果没有任何变化 属性。

我不认为我完全理解你的问题的细节,但这里有一个可能会启发你的解决方案的草图:

export default {
  data() {
    return { areArchivedCoursesVisible: false };
  },
  computed: {
    authorizedCourses() {
      const getUser = this.$store.getters['UserData/getUser'];

      // The callback in a filter should return true or false.
      // I'm not sure if this is exactly what you want.
      // If your original code works, then skip this.
      return this.courses.filter(
        (c) => this.checkAuthorization(['leader']) && c.createdBy === getUser.uid
      );
    },
    visibleCourses() {
      // This is probably what you display in your template.
      // It's either all of the authorized courses, or the authorized
      // courses which are not archived.
      return this.areArchivedCoursesVisible
        ? this.authorizedCourses
        : this.this.authorizedCourses.filter((c) => !c.archive);
    },
  },
  methods: {
    toggleVisible() {
      // Toggle between showing and not showing the archived courses
      this.areArchivedCoursesVisible = !this.areArchivedCoursesVisible;
    },
  },
};

这只是保存一些状态,指示是否应显示存档课程(通过方法切换)。然后你可以结合你的计算属性来根据状态得到正确的答案。在此示例中,visibleCourses 使用计算的输出 属性 authorizedCourses + 当前状态。

另请注意,我将计算属性命名为名词而不是动词,我发现这使代码更容易理解。