【问题标题】:How can I use multiple condition in v-if in VueJS?如何在 VueJS 的 v-if 中使用多个条件?
【发布时间】:2018-05-10 22:47:59
【问题描述】:

这是我的代码:

JavaScript

let Names = [
{
Name: "Josh"
FullName: ""
},
{
Name: "Jonathan"
FullName: null
},
{
Name: "James"
FullName: "James Johnson"
}];

Index.Vue

<ul>
    <li v-for="item in Names" 
    v-if=" item.FullName != null || item.FullName != '' " >
     {{FullName}}
    </li>
</ul>

这个v-if=" item.FullName != null || item.FullName != '' " 不起作用,为什么?如何在 v-if 中添加两个条件?

【问题讨论】:

  • 顺便说一下,您应该为此考虑一个计算属性。
  • @ceejayoz 这是我的第一个想法,但它实际上在 v-for 内,所以你不能真正使用计算,但你可以使用方法。
  • 我应该使用计算方法还是方法?如果 FullName'' (空字符串)或 null ,我只想不显示 li 。就是那个=x
  • 试试v-if="!!item.FullName"
  • 在 javascript 中,任何空、null 或未定义的值都是虚假的。因此,!! 双重否定并返回一个实际的布尔值,表示它们是否是这些虚假值中的任何一个。

标签: javascript vue.js vuejs2


【解决方案1】:

也许这是您将空字符串视为错误值的方式,|| 说:如果两个(左/右)表达式中的任何一个为真,则显示全名,这不是您想要的。

试试这个:

 <li v-for="item in Names" v-if="item.FullName !== null && item.FullName !== ''"> 

另外,从你的代码来看,{{ FullName }} 应该是{{ item.FullName }}

【讨论】:

  • 我必须使用运算符||,我尝试再添加一个=,但没有奏效:(
  • 虽然答案是正确的,但在同一个元素上使用 v-for 和 v-if 是一种不好的做法。参考 Kamocsai Kamo András 的回答
  • @jedi rigth。这在文档中有所说明 - vuejs.org/v2/style-guide/…
  • 只是我的眼睛还是上面的答案中有奇数个不匹配的"
  • @MCCCS 绝对不是你的眼睛 :)
【解决方案2】:

Samayo 的回答是对的,也许这个问题有点老了,但是有一些问题:

首先,请避免 v-for 和 v-if 在同一个元素中! (来源:https://vuejs.org/v2/style-guide/#Avoid-v-if-with-v-for-essential

其次,如果你想使用 v-if 和 ||运算符,只需使用计算或简单的方法。

最后,我认为如果你使用 camelCase,而不是 PascalCase 来表示变体或对象的键,这是更好的方法。

<li v-if="fullNameIsExist(item)">
  <span>{{ item.fullName }}

如果你使用一种方法:

methods: {
  fullNameIsExist (item) {
    if (![null, ''].includes(item.fullName)) return true
  }
}

【讨论】:

    【解决方案3】:

    您可以创建一个 computed property 来评估所有条件,然后为您的计算属性创建一个 v-if。它将使您的模板更清晰,并且计算的属性将为self documenting

    【讨论】:

      【解决方案4】:

      最好的方法是使用计算的东西

      computed: {
          condition() {
            this.FullName;
            return this.FullName !== null && this.FullName !== '';
          }
        }
      

      这是条件吗

      <li v-for="item in Names" v-if="condition> 
      

      你应该使用{{ item.FullName }} 而不是{{ FullName }} 你的条件几乎是正确的,但错误是因为{{ FullName }} 这就是为什么你应该写{{ item.FullName }} 而因为|| 而你最好使用&amp;&amp; 你也可以这样做:

       <li v-for="item in Names" v-if="item.FullName !== null && item.FullName !== ''> 
      

      【讨论】:

      【解决方案5】:

      简单易行。

      <li v-for="item in Names" v-if="!!item.FullName>
      

      在 Javascript 中,!!0 将返回 false!!1 将返回 true!!"" 将返回 false!!"a" 将返回 true!!null 将返回 @987654

      【讨论】:

      • 不要在 Vue2 中同时使用 v-for 和 v-if。请参阅上述答案中的文档链接。
      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2020-11-15
      • 2017-02-02
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多