首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复V-如果在计算属性内?

复V-如果在计算属性内?
EN

Stack Overflow用户
提问于 2019-01-22 14:47:47
回答 2查看 2.1K关注 0票数 1

我正在尝试添加一个复杂的v-if语句,它在模板中工作,但是当我向它添加更多时,在模板中处理的东西太多了。

我已经将语句添加到计算属性中,这会在计算属性的计算过程中引发错误。有什么想法吗?

代码语言:javascript
复制
<div v-for="offer in offers" class="grid-4 item hotel hotel-item" v-if="showOffer"> 
<!-- OFFER CONTENT HERE --> 
</div>



computed: {
  showOffer() {
    return (offer.island === filters.islandFilter || filters.islandFilter === 'All') &&
      (offer.starrating === filters.starRating || filters.starRating === 'All') &&
      (offer.board === filters.boardBasis || filters.boardBasis === 'All') &&
      (offer.duration === filters.duration || filters.duration === 'All') &&
      (offer.price.from < filters.price)
  }
}

我试图返回每个‘报价’在要约数据属性是真实的V-if语句。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-22 18:06:46

First

  • 当您在<script>标记中时,需要将this放在要从vue data访问的变量前面。例如,在代码中,使用this.filters.islandFilter而不是filters.islandFilterfilters.islandFilter是从模板访问filters时使用的语法,而不是从脚本标记中使用的语法。
  • 您正在尝试访问计算属性中的offer,但是您的方法不知道offer是什么。您可以使用方法代替计算属性,然后调用showOffer(offer)。但是,好的做法是对数据使用过滤器(参见下一段)。

:

在大多数情况下,v-forv-if语句不能很好地混合在一起。如果您只想呈现部分offers,则应该创建一个计算属性,该属性返回筛选后的报价列表,然后对其使用v-for。

例如,在模板标记中:

代码语言:javascript
复制
<div v-for="offer in filteredOffers" class="grid-4 item hotel hotel-item"> 
      <!-- OFFER CONTENT HERE --> 
</div>

在您的脚本标记中:

代码语言:javascript
复制
  data: {
    offers: [
       //your list of offers
    ]
  },
  computed: {
    filteredOffers () {
      return this.offers.filter(offer => {
        return (offer.island === this.filters.islandFilter || this.filters.islandFilter === 'All') &&
          (offer.starrating === this.filters.starRating || this.filters.starRating === 'All') &&
          (offer.board === this.filters.boardBasis || this.filters.boardBasis === 'All') &&
          (offer.duration === this.filters.duration || this.filters.duration === 'All') &&
          (offer.price.from < this.filters.price)
      })
    }
  }
票数 1
EN

Stack Overflow用户

发布于 2019-01-22 14:50:29

尝试使用方法而不是使用计算属性,方法是将offer作为参数传递,如下所示:

代码语言:javascript
复制
  <div v-for="offer in offers" class="grid-4 item hotel hotel-item" v-if="showOffer(offer)"> 
      <!-- OFFER CONTENT HERE --> 
  </div>
代码语言:javascript
复制
methods: {

  showOffer(offer) {
    return (offer.island === filters.islandFilter || filters.islandFilter === 'All') &&
      (offer.starrating === filters.starRating || filters.starRating === 'All') &&
      (offer.board === filters.boardBasis || filters.boardBasis === 'All') &&
      (offer.duration === filters.duration || filters.duration === 'All') && (offer.price.from < filters.price)

  }

}

但是,我推荐另一种使用计算属性的方法,该方法通过返回符合给定条件的项并删除offers指令,返回筛选您的v-if数组的数组:

代码语言:javascript
复制
computed: {
  comp_offers() {
    return this.offers.filter((offer) => {

      return (offer.island === filters.islandFilter || filters.islandFilter === 'All') &&
        (offer.starrating === filters.starRating || filters.starRating === 'All') &&
        (offer.board === filters.boardBasis || filters.boardBasis === 'All') &&
        (offer.duration === filters.duration || filters.duration === 'All') && (offer.price.from < filters.price)

    })
  }

}
代码语言:javascript
复制
<div v-for="offer in comp_offers" class="grid-4 item hotel hotel-item">
  <!-- OFFER CONTENT HERE -->
</div>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54310775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档