我有一个Vue.js应用程序,它会加载一系列项目,并将每个项目作为prop
传递给Vue组件。
我发现通过使用mixins
,我可以共享常见的组件属性,例如computed
,created
等。
现在,我正在尝试对项目列表进行排序,但是想不出如何访问每个组件的计算属性来进行排序/过滤。 我该如何解决这个问题?
项目
[{
price: 10,
qty: 2
}, {
price: 8,
qty: 3
}]
Mixin - ./Cost.js
export default {
computed: {
cost () {
return this.price * this.qty;
}
}
}
组件(正常工作)- ./Product.vue
import Cost from './Cost.js'
export default {
name: 'product-item',
props: ['product'],
mixins: [Cost]
}
你如何访问计算属性,或重新构建此设置?
列表组件
<template>
<div id="list">
<div v-for="product in sorted" :product="product">Cost: {{ cost }} </div>
</div>
</template>
<script>
import ProductItem from './Product.vue'
export default {
components: { ProductItem },
created: () {
this.items = [...] // as noted above
},
computed: {
sorted () {
return this.items.sort( (a,b) => b.cost - a.cost); // cost is not accessible!
}
}
}
</script>
this.items
进行了排序,但是this.items
是一个包含两个对象的数组,每个对象都有price
和qty
属性,而不是每个元素都是ProductItem
组件。显然它们没有cost
属性。 - Sphinx<div v-for="product in sorted" :product="product" ref="test">
,然后computed: () { return this.$refs.test.sort( (a,b) => b.cost - a.cost); // cost is not accessible! }
- Sphinxcomputed
不应该返回一个带有方法的对象吗?computed: { sorted() { return this.items.sort( (a,b) => b.cost - a.cost); }}
- Wildan Maulana Syahidillah