Vue.js:将项目作为参数传递给v-for中的计算prop,返回子数组排序?

时间:2018-02-08 10:29:48

标签: javascript vue.js vuejs2

已经谷歌搜索了很长一段时间才弄清楚如何做到这一点..

我有一个“意图”列表,每个人都有一个“实体”列表,以嵌套的v-for形式呈现。

已经计算了意图,但我还需要动态对“实体”列表进行排序,因此我认为制作该列表也是计算出来的。

错误:

**TypeError: _vm.entityList is not a function**

这是我目前的做法:

< script >
  import uniq from 'lodash/uniq'
import orderby from 'lodash/orderby'
import Util from "@/components/util.js"

export default {
  data() {
    return {
      // ....
    }
  },
  computed: {
    nluData() {
      return orderby(this.$store.getters.nlujson.filter(item => {
        return item.intent.toLowerCase() === this.selectedIntent
      }), ['intent', 'text'], ['asc', 'asc'])
    },
    entityList(item) {
      return orderby(item.entities, ['entity', 'value'], ['asc', 'asc'])
    },
  },
  created() {
    this.$store.dispatch('getNluJson')
  },
  methods: {
    // ......    
  }


  </script>
// parent structure
<div v-for="(item, key, index) in nluData">
  // displaying nluData content through item.mydata // child structure
  <div v-for="ent in entityList(item)">
    // displaying entities data through computed prop. // item.entities is the array
  </div>
</div>

{
			"id": "J4a9dGEBFtvEmO3Beq31",
			"text": "This is Intent 1",
			"intent": "shelf_life",
			"entities": [
				{
					"start": "33",
					"end": "44",
					"value": "fridge",
					"entity": "ingredient_placement"
				},
				{
					"start": "10",
					"end": "20",
					"value": "duration",
					"entity": "shelf_life"
				},
				{
					"start": "25",
					"end": "30",
					"value": "spareribs",
					"entity": "ingredient"
				}
			]
		},

2 个答案:

答案 0 :(得分:3)

计算属性不会获得任何参数。在您的情况下,道具entityList()必须是一种方法:

methods : {
    entityList(item) {
      return orderby(item.entities, ['entity', 'value'], ['asc', 'asc'])
    },
},
  

https://vuejs.org/v2/guide/computed.html

答案 1 :(得分:1)

您可以使用匿名函数将参数传递给计算属性,例如:

computed: {
  entityList() {
    return (item) =>
      orderby(item.entities, ['entity', 'value'], ['asc', 'asc']);
    },
  },