美文网首页
【实战】Vue.js 中 v-if 和 v-show 的区别

【实战】Vue.js 中 v-if 和 v-show 的区别

作者: KimYYX | 来源:发表于2017-11-30 16:53 被阅读0次

一、业务需求


在一个拥有4个步骤的单向流程(Flow)中,需要在第2步展现 A 组件,第4步展现 B 组件,在第1、3步的时候隐藏组件。在有组件展示的步骤里,会传给组件的4组不同的数据(param),组件需要根据传入的数据做一些业务操作。

二、需求分析


  1. 在同一个地方有组件间的切换,可采用动态组件 component
  2. 对一个组件来说,当传入参数改变的时候,需要有相应的动作,所以可用 watcher 监听传入的参数是否改变。
  3. 组件需要隐藏 / 显示,可考虑使用 v-if 或者 v-show
  4. v-if 会重新创建组件(这是所谓开销大的一方面),有些组件自己维护的状态是不能保留的

三、伪代码


/*
 * A.vue
 * 组件A
 */
<template lang="pug">
div
  p {{param.text}}
</template>
<script>
export default {
  name: 'A',
  props: [ 'param' ],
  watch: {
    param: () => {
      ...
    }
  }
}
</script>

组件 B 和组件 A 类似,除了 name: 'B',所以略过了。

/*
 * Flow.vue
 */
<template lang="pug">
div
  div#container(v-if='show')
    component(
      :is='view' 
      :param='param'
    )
</template>

<script>
import A from 'A.vue'
import B from 'B.vue'

export default {
  name: 'Flow',
  components: { A, B },
  data() {
    return {
      show: false,
      view: null,
      param: null
    }
  },
  mounted() {
    this.view = 'A'
    setTimeout(() => {
      // 经过1秒以后流程进入第二步
      this.param = { ... } // 模拟第一次传入数据
      this.show = true // 显示组件
      // ... 其余步骤模拟略过
    }, 1000)
  }
}
</script>

Flowmounted 执行的时候,A 中的 param watcher 并不会被执行;若把 Flow 中的 v-if 改成 v-show,则 param watcher 会被执行。

四、分析


当使用 v-show 的时候,this.view = 'A' 的时候,A 组件已经完成了初始化(会触发 mounted),此时 A 组件拿到的 paramnull,所以当 paramFlow 中被赋值的时候,会触发 watcher 事件。注意:在切换 view 的时候,把新组件的一些初始化操作放到 vm.$nextTick 的回调里面。
而使用 v-if的话,A 组件的初始化会被延迟到 this.show = true 的时候,此时 A 组件拿到的 param 是已经被赋过值的了。

相关文章

  • vue中v-if与v-show的区别

    在 Vue.js 中,使用 v-if 和 v-show 指令来控制条件渲染。 1.二者的区别: v-show :会...

  • vue2.0基础(一、内部指令)

    指令 1、条件判断 v-if v-else v-show ### v-if 和v-show的区别: v-if:...

  • 第二天

    1、v-show和v-if区别? v-show判断节点是否隐藏 v-if 判断节点是否渲染 2、vue中key的作...

  • 2018-05-22 指令

    v-if && v-show && v-else v-if和v-show的区别:v-if 判断是否加载,如果时fa...

  • vue2.0题目

    1 .v-show和v-if的区别 v-show 通过css display 控制显示和隐藏 v-if 组件真正的...

  • Vue学习笔记二:Vue基础语法

    1.模板语法 2.属性绑定 3.条件渲染 v-if & v-show v-if 和v-show的区别:v-if: ...

  • vue2.0基础知识点

    1、v-if与v-show的区别 条件渲染 (使用v-if) 条件展示 (使用v-show) 2、关于vue中Wa...

  • 【实战】Vue.js 中 v-if 和 v-show 的区别

    一、业务需求 在一个拥有4个步骤的单向流程(Flow)中,需要在第2步展现 A 组件,第4步展现 B 组件,在第1...

  • v-if和v-show

    v-if和v-show的区别 v-if时删除创建元素,v-show则控制css的display属性 如果元素需要频...

  • vue面试相关(1)

    v-if和v-show的区别v-show只是CSS层面的display: none和display: block之...

网友评论

      本文标题:【实战】Vue.js 中 v-if 和 v-show 的区别

      本文链接:https://www.haomeiwen.com/subject/ffwvbxtx.html