如何在vue中优雅地使用v-if判断

Posted 铁锤妹妹@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在vue中优雅地使用v-if判断相关的知识,希望对你有一定的参考价值。

情况一:做vue项目,有的时候会遇到有几个元素都使用同一个v-if条件。

下面这种方法虽然可以实现,但是整体代码看起来有点笨拙,我们可以用<template>标签进行优化一下。

<template>
  <div class="card">
    <img src="../../assets/image/background frame.png" />
    <h3 v-if="expanded">123</h3>

    <h4 v-if="expanded">456</h4>
    <div class="card-content" v-if="expanded">789</div>
    <img v-if="expanded" src="../../assets/image/background frame.png" />
  </div>
</template>

<template> 标签可以在模板中的任何地方使用,现在我们使用<template> 标签来分组同一个条件判断的这些元素,并将v-if提升到模板template本身。
这样使用就可以让下面4个标签同时控制了。
template标签跟div标签或者其他标签最大区别就是不会作为渲染的结果(f12看不到)。

<template>
  <div class="card">
    <img src="../../assets/image/background frame.png" />
    <template v-if="expanded">
      <h3>123</h3>
      <h4>456</h4>
      <div class="card-content">789</div>
      <img src="../../assets/image/background frame.png" />
    </template>
  </div>
</template>
<script>
export default {
  data() {
    return {
      expanded: true
    };
  }
};
</script>

<style></style>

情况二:v-if中条件较多时优雅写法

普通写法,代码有点冗余

v-if=" type==1 || type==2 || type==3 "

优雅写法

v-if=" [1,2,3].includes(type) "

情况三:经常使用v-if、v-else-if、v-else通过条件来判断具体显示某种信息

<template>
  <div class="card">
    <span v-if="type == 1">苹果</span>
    <span v-else-if="type == 2">香蕉</span>
    <span v-else-if="type == 3">西瓜</span>
    <span v-else>橘子</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      type: 3
    };
  }
};
</script>

<style></style>

页面显示 西瓜
这种情况代码显示繁琐。 我们就可以使用过滤器来处理。
vue中分为局部过滤器全局过滤器

1) 局部过滤器

<template>
  <div class="card">
    <span>{{ type | fruitFilter }}</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      type: 7
    };
  },
  filters: {
    fruitFilter(value) {
      switch (value) {
        case 1:
          return "苹果";
          break;
        case 2:
          return "香蕉";
          break;
        case 3:
          return "西瓜";
          break;
        default:
          return "其他水果";
          break;
      }
    }
  }
};
</script>

<style></style>

type是要判断的类型,fruitFilter是自定义的局部过滤器。
fliters所在位置是跟data和vue的生命周期同一级别。

2) 全局过滤器
如果是公共使用的可以在main.js自定义全局

/*全局过滤器 */
Vue.filter('fruitFilter', function(value) {
  switch (value) {
    case 1:
      return "苹果";
      break;
    case 2:
      return "香蕉";
      break;
    case 3:
      return "西瓜";
      break;
    default:
      return "其他水果";
      break;
  }
})

如有其他简化方法以后继续更新

以上是关于如何在vue中优雅地使用v-if判断的主要内容,如果未能解决你的问题,请参考以下文章

vue中v-if与v-show的区别以及使用场景

vue.js的v-if判断数组多少个

如何利用Vue.js库中的v-if内部指令判断元素显示

vue中使用v-if判断数组长度是出现length报错

Vue中使用v-if判断某个元素满足多个条件的简约写法-案例

vue中v-if和v-for的区别是什么