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

Posted

技术标签:

【中文标题】使用 Vue.js 中的方法过滤计算属性的数组【英文标题】:Filter array of a computed property using a method in Vue.js 【发布时间】:2021-06-28 17:22:00 【问题描述】:

我希望这不是一个愚蠢的问题。我有一个列出 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'])
        
    

当前,当我单击按钮时,计算的属性没有任何变化。

【问题讨论】:

【参考方案1】:

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

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 的输出 + 当前状态。

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

【讨论】:

以上是关于使用 Vue.js 中的方法过滤计算属性的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 中创建 Date(now) 以在计算属性中使用?

组件渲染时Vue JS计算属性尚不可用

vue.js基础知识篇:简介数据绑定指令计算属性表单控件绑定和过滤器

05Vue.js---计算属性

Vue.js - 如何在数组对象上实现计算属性?

Vue的计算属性-过滤器-添加过渡动画的几种方式