在这种情况下,v-if的另一种解决方案是什么?

时间:2018-09-25 01:33:53

标签: javascript vue.js vuetify.js

我正在尝试以很好的方式使用v-if,但是到目前为止,它看起来很愚蠢。 Codepen

这是当前的代码,我试图根据功能的标题选择“ icon”:

<v-icon v-if="item.title === 'A day' ">close</v-icon>
<v-icon v-if="item.title === 'A week' ">close</v-icon>
<v-icon v-if="item.title === 'A month' ">check_circle_outline</v-icon>
<v-icon v-if="item.title === 'Forever' ">check_circle_outline</v-icon>
new Vue({
  el: '#app',
  data () {
    return {
      menuItems:[
        {
          title: 'A day', 
          price: '$50',
          features:['Exercise','Consult','Personal meeting'],
          action: 'check_circle_outline'
        },
        {
          title: 'A week', 
          price: '$200',
          features:['Exercise','Consult','Personal meeting'],
          action: 'check_circle_outline'
        },
        {
          title: 'A month', 
          price: '$500',
          features:['Exercise','Consult','Personal meeting'],
          action: 'check_circle_outline'
        },
        {
          title: 'Forever', 
          price: '$5000',
          features:['Exercise','Consult','Personal meeting'],
          action: 'check_circle_outline'
        }
      ],
    }
  }
})

首先,我尝试了这一点:

<v-icon v-if="item.title === 'A day' || 'A week' ">close</v-icon>
<v-icon v-else>check_circle_outline</v-icon>

这行不通,不知道为什么。

能否请您帮忙找到正确的解决方案,以根据标题调整图标?

4 个答案:

答案 0 :(得分:4)

在这种情况下,我认为条件在模板上会更好。如果要进行少量优化,可以将正则表达式拉出一个常数。

// In template
<v-icon>{{ durationText }}</v-icon>

// in component
computed: {
  durationText() {
    const dayOrWeekRegex = /(day|week)/i
    if (dayOrWeekRegex.test(this.title)) return 'close';

    return 'check_circle_outline';
  }
}

答案 1 :(得分:3)

您提到您首先尝试过此方法:

<v-icon v-if="item.title === 'A day' || 'A week' ">close</v-icon>
<v-icon v-else>check_circle_outline</v-icon>

应该是这样:

<v-icon v-if="item.title === 'A day' || item.title === 'A week'">close</v-icon>
<v-icon v-else>check_circle_outline</v-icon>

答案 2 :(得分:2)

另一种替代方法是v-switch-case指令here

<div v-switch="item.title">
  <div v-case="'A day'">
    ...
  </div>
</div>

答案 3 :(得分:1)

您可以尝试一下我的解决方案。我正在使用三元运算符以及像这样的小胡子语法:

  <v-icon> 
    {{
      item.title === 'A day' || item.title==='A week'?
      'close':'check_circle_outline'
    }}
  </v-icon>

这些代码替换为:

<v-icon v-if="item.title === 'A day' ">close</v-icon>
<v-icon v-if="item.title === 'A week' ">close</v-icon>
<v-icon v-if="item.title === 'A month' ">check_circle_outline</v-icon>
<v-icon v-if="item.title === 'Forever' ">check_circle_outline</v-icon>

我已经在您的Codepen上测试了此解决方案,并且按预期工作。希望您会喜欢。顺便说一句,顺便说一句。