发表于: 2019-11-07 23:56:07

1 1088


今天完成了什么:

处理角色列表新增功能bug;

看面试题;

遇到了什么问题:


后端的锅导致以为自己的问题花了很长时间检测自己的代码,又污染了svn;


收获了什么:


签到模块用到了v-if,并对他进行了了解;


条件渲染 v-if、v-show,并比较两者差异。

v-if

若希望某区块在特定条件下才出现,可以使用v-if、v-if-else和v-else依照运算结果决定出现的时机。

例 1

条件为 true 或 false 时才显示。如下范例,依照 isShow 的值决定显示的区块,如果 isShow 为 true,显示「条正成立」;反之,显示「条件不成立」。

<div id="app">

  <div v-if="isShow">条正成立</div>

  <div v-else>条件不成立</div>

</div>

var vm = new Vue({

  el: '#app',

  delimiters: ['${', '}'],

  data: {

    isShow: true

  }

});

// 由于部落格会把双花括号的内容吃掉,所以设定 delimiters 以显示完整程式码。

例 2

将条件判断写在画面上,依照运算结果决定显示与否。如下程式码所示,依照 type 决定要显示的区块。由于目前设定 type 为 B,因此画面上会显示 B。

<div id="app">

  <div v-if="type === A">A</div>

  <div v-else-if="type === B">B</div>

  <div v-else>C</div>

</div>

var vm = new Vue({

  el: '#app',

  delimiters: ['${', '}'],

  data: {

    type: "B"

  }

});

打开浏览器会看到画面显示 B。

Vue.js: 条件渲染 v-if

使用 key 决定可重覆使用的元素

为了效能因素,若区块元素切换只是因为为条件不同而带入不同的值,元素不会重新渲染,只是替换掉不同的地方。

如下所示,根据 isShow 的真伪值决定显示的区块,但不论如何切换,使用者填入的 value 始终不会被清除,而只是替换掉不同的地方,即 placeholder 而已。

Vue.js: 条件渲染 v-if

<div id="app">

  <div v-if="isShow">

    <input type="text" placeholder="条件成立时的提示文字">

  </div>

  <div v-else>

    <input type="text" placeholder="条件不成立时的提示文字">

  </div>

  <button @click="toggle">切换显示条件</button>

</div>

var vm = new Vue({

  el: '#app',

  delimiters: ['${', '}'],

  data: {

    isShow: true

  },

  methods: {

    toggle: function() {

      this.isShow = !this.isShow;

    }

  }

});

若希望能有效区别,可加上 key 并带入唯一值,这样每次切换就会重新渲染,而非重覆使用已有元素。

于是,每次切换时,使用者输入就会被清空了。

Vue.js: 条件渲染 v-if

<div id="app">

  <div v-if="isShow">

    <input type="text" key="123456789" placeholder="条件成立时的提示文字">

  </div>

  <div v-else>

    <input type="text" key="987654321" placeholder="条件不成立时的提示文字">

  </div>

  <button @click="toggle">切换显示条件</button>

</div>

v-show

用法与v-if大致相同。

<div id="app">

  <div v-show="isShow">条正成立</div>

</div>

v-if 与 v-show 的差异

使用上来说,差异在于是否有 else 的状况。若有其他状况,则使用v-if;否则v-if和v-show效果相同。

以 HTML 渲染上来说,v-if是有条件的渲染的,若条件判断为 true 则渲染;而v-show则是无条件渲染,但视条件以 inline style css 隐藏。

<template>可用v-if决定是否出现,但无法使用v-show。


明天计划:

修复部分bug;

看面试题;


返回列表 返回列表
评论

    分享到