【问题标题】:Vue.js + Vuetify using v-data-table within v-forVue.js + Vuetify 在 v-for 中使用 v-data-table
【发布时间】:2018-01-21 01:48:33
【问题描述】:

我有 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;
            })
        },

【问题讨论】:

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


    【解决方案1】:

    我认为你可以这样使用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]
      }
    }
    

    【讨论】:

    • 感谢 Bert 成功了!现在我不确定为什么我最初的尝试没有成功,我有 v-for="roster in rosters",并且我在脚本中返回了一个数据对象作为 rosters:['homeTeam', 'awayTeam']。 ..
    • @gvon79 我只是添加了一些关于为什么您的初始尝试不起作用的信息。看看有没有帮助。
    • 确保为 v-for 生成的根项目添加一个键,这样您就不会得到缓存的渲染工件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2019-11-10
    • 2020-12-13
    • 2019-11-19
    • 2021-07-12
    • 2020-01-25
    • 2021-02-11
    相关资源
    最近更新 更多