为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用“v-if”实现“v-for”?

如何使用“v-if”实现“v-for”?

幕布斯6054654 2022-05-22 11:18:33
我有两张桌子,一张是书籍,另一张是库存,我正在尝试按名称获取书籍并将其显示在库存表中我尝试了以下代码,但它显示了这个错误。[vue/no-use-v-if-with-v-for] 'v-for' 指令中的 'Books' 变量应该替换为返回过滤数组的计算属性。您不应将“v-for”与“v-if”混用。<tr role="row" class="even" v-for="Stock in Stocks.data" v-bind:key="Stock.id"> <td v-for="Book in Books"     :value="Book.id"     :key="Book.id"     v-if="Stock.book_id === Book.id">     {{Book.name}} </td> </tr>我不知道如何创建一个返回过滤数组或对象的计算属性,任何帮助将不胜感激。
查看完整描述

2 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我会使用一个计算属性,该属性创建一个对象,其中 Books 按 Stock ID 分组


computed: {

  stocksWithBooks () {

    return this.Stocks.data.map(stock => ({

      ...stock,

      books: this.Books.filter(({ id }) => id === stock.book_id)

    })

  }

}

现在您可以在模板中使用它


<tr role="row" class="even" v-for="Stock in stocksWithBooks" v-bind:key="Stock.id">

  <td v-for="Book in Stock.books" :key="Book.id">

    {{Book.name}}

  </td>

</tr>

为确保您不会因数据分配时间而出错,您应该确保定义一些合理的初始值,例如


data() {

  return {

    // ...

    Books: [], // not {}

    // ...

    Stocks: { data: [] }, // define an empty "data" array

    // ...

  }

}


查看完整回答
反对 回复 2022-05-22
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

不要在同一个元素中使用v-ifand ,你可以使用.v-fortemplate


<tr role="row" class="even" v-for="Stock in Stocks.data" v-bind:key="Stock.id">

     <td v-for="Book in Books" :value="Book.id" :key="Book.id">

         <template v-if="Stock.book_id === Book.id">

            {{Book.name}}

         </template> 

     </td>

 </tr>


查看完整回答
反对 回复 2022-05-22
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信