Vue.js + Vuetify 在 v-for 中使用 v-data-table

标签 vue.js computed-properties v-for vuetify.js

我有 2 个计算数组,homeTeam 和 awayTeam。下面的代码确实可以生成 2 个表来显示 homeTeam 和 awayTeam,我如何简化代码以仅创建一次表并循环遍历 homeTeam 和 awayTeam。我尝试将其包装在带有 ['homeTeam','awayTeam] 数组的 v-for 中,但这没有用。计算的作品,下面的一切作品,我只是想简化模板。

<v-flex xs12 md6>
    <v-data-table :headers="headers" :items="homeTeam" hide-actions class="elevation-1 white">
        <template slot="items" scope="props">
            <td class="text-xs-right" v-model="gamesheet.number">{{ props.item.number }}</td>
            <td v-model="gamesheet.name">{{ props.item.name }}</td>
        </template>
    </v-data-table>
</v-flex>

<v-flex xs12 md6>
    <v-data-table :headers="headers" :items="awayTeam" hide-actions class="elevation-1 white">
        <template slot="items" scope="props">
            <td class="text-xs-right" v-model="gamesheet.number">{{ props.item.number }}</td>
            <td v-model="gamesheet.name">{{ props.item.name }}</td>
        </template>
    </v-data-table>
</v-flex>

_

computed: {
    homeTeam() {
        return this.players.filter((player) => {
            return player.team ==  this.gameinfo.home;
        })
    },
    awayTeam() {
        return this.players.filter((player) => {
            return player.team == this.gameinfo.away;
        })
    },
    spares() {
        return this.players.filter((player) => {
            return player.team !=  this.gameinfo.home && player.team != this.gameinfo.away;
        })
    },
},

这是我对 v-for 的尝试,我明白为什么这行不通。

    <template v-for="roster in rosters">
            <v-flex xs12 md6>
                <v-data-table :headers="headers" :items="roster" hide-actions class="elevation-1 white">
                    <template slot="items" scope="props">
                        <td class="text-xs-right" v-model="gamesheet.number">{{ props.item.number }}</td>
                        <td v-model="gamesheet.name">{{ props.item.name }}</td>
                        <td class="text-xs-right" v-model="gamesheet.position">{{ props.item.position }}</td>
                        <td class="text-xs-right" v-model="gamesheet.goal">{{ props.item.goal }}</td>
                        <td class="text-xs-right" v-model="gamesheet.assist">{{ props.item.assist }}</td>
                        <td class="text-xs-right" v-model="gamesheet.team">{{ props.item.team }}</td>
                    </template>
                </v-data-table>
            </v-flex>
        </template>

...在脚本中...

    data () {
        return {
            rosters: ['homeTeam', 'awayTeam'],
        }
    },
    computed: {
        homeTeam() {
            return this.players.filter((player) => {
                return player.team ==  this.gameinfo.home;
            })
        },
        awayTeam() {
            return this.players.filter((player) => {
                return player.team == this.gameinfo.away;
            })
        },

最佳答案

我想你可以这样使用 v-for:

<template v-for="team in [homeTeam, awayTeam]">
  <v-flex xs12 md6>
    <v-data-table :headers="headers" :items="team" hide-actions class="elevation-1 white">
      <template slot="items" scope="props">
          <td class="text-xs-right" v-model="gamesheet.number">{{ props.item.number }}</td>
          <td v-model="gamesheet.name">{{ props.item.name }}</td>
      </template>
    </v-data-table>
  </v-flex>
</template>

您最初的尝试有几个问题。第一个计算值不可用于数据函数(它们稍后初始化)。其次,您引用了值,这意味着 rosters 只是两个字符串的数组。

您可以采用的另一种方法是使 rosters 成为一个计算值。

computed:{
  rosters(){
    return [this.homeTeam, this.awayTeam]
  }
}

关于Vue.js + Vuetify 在 v-for 中使用 v-data-table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653903/

相关文章:

javascript - Vue 计算属性未在更新其 react 性依赖项时更新

vue.js v-for 在两个表行上

javascript - vue.js http 获取 web api url 渲染列表

css - Scss 样式不适用于 Vue 组件

vue.js - Vue 为每个计算属性

vue.js - 在 VueJS 中检索计算属性

javascript - v-for 循环项目不会立即在 Vue 中更新

javascript - Vue JS - 在for循环中修改对象而不是实时更新

javascript - Vue.js 破坏了 Google map 功能