【问题标题】:Vue.js: can't orderBy in v-forVue.js:无法在 v-for 中订购
【发布时间】:2017-03-23 14:16:31
【问题描述】:

我已经升级到 Vue.js 2.0.5 并且 v-for 中的 orderBy 似乎不再工作了

<li v-for="c in rooms | orderBy 'last_iteraction'">

输出

  • 无效表达式:v-for="c in rooms | orderBy 'last_iteraction'"

有人知道怎么解决吗?

【问题讨论】:

  • last_iteractionlast_interaction?
  • 'last_iteraction' 在这种情况下。但这不适用于“房间”对象的任何属性。
  • 看到Docs
  • @haim770 这是之前 Vue 版本 (1.x) 中的“预构建”过滤器
  • @ABDEL-RHMAN 谢谢,这行得通。

标签: javascript vue.js


【解决方案1】:

orderBy 过滤器在 vue.js v-2 中被移除。

引用自 vue.js 文档

代替:

&lt;p v-for="user in users | orderBy 'name'"&gt;{{ user.name }}&lt;/p&gt;

在计算属性中使用 lodash 的 orderBy(或者可能是 sortBy):

&lt;p v-for="user in orderedUsers"&gt;{{ user.name }}&lt;/p&gt;

computed: {
  orderedUsers: function () {
    return _.orderBy(this.users, 'name')
  }
}

参考:

https://vuejs.org/v2/guide/migration.html#Replacing-the-orderBy-Filter

【讨论】:

  • 我花了一些时间在 v2 中搜索有关 orderBy 的一些信息,但没有找到此链接。谢谢!
  • 我们是否需要加载 lodash 库才能使用 orderBy 函数?
  • 是的——你可以在你的项目中安装 lodash,并将它添加到你的组件中:import _ from 'lodash'
  • 不,你不需要 lodash 只是为了sort an array
  • 但是请注意,在 v5.0.0 的 Roadmap 上,计划停止使用 per method packages 以支持模块化 lodash
【解决方案2】:

你也可以使用vue2过滤器包。

  1. 首先使用 npm 安装它。

npm install vue2-filters

  1. 然后,将其添加到您的组件中或全局。
import Vue from 'vue'
import Vue2Filters from 'vue2-filters'
  
Vue.use(Vue2Filters)
  1. 要在组件中使用预定义的方法之一(例如 limitBy、filterBy、find 或 orderBy),您还需要将 Vue2Filters.mixin 添加到 mixin 列表中:
import Vue2Filters from 'vue2-filters'

export default {
  ...
  mixins: [Vue2Filters.mixin],
  ...
}
  1. 然后在模板中使用它
 <li v-for="c in orderBy(rooms,'last_iteraction')">

有一个预定义过滤器列表。检查一下。

参考:

https://github.com/freearhey/vue2-filters

【讨论】:

  • 谢谢:] 这完全符合我正在寻找的答案! ^ ^
猜你喜欢
  • 2018-01-09
  • 2020-07-18
  • 2018-01-21
  • 2017-09-15
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
相关资源
最近更新 更多