国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue頁面加載閃爍問題的解決方法

2019-11-19 14:05:57
字體:
來源:轉載
供稿:網友

v-if 和 v-show 的區別

v-if只會在滿足條件時才會編譯,而v-show不管是否滿足條件始終會編譯,v-show的顯示與隱藏只是簡單的切換CSS的display屬性。

也就是說,在使用v-if時,若值為false,那么頁面將不會有這個html標簽生成。而v-show:不論其值是false還是true,html元素都會存在,只是簡單的切換css的display屬性。

使用場景

    一般來說,v-if 有更高的切換消耗而 v-show 有更高的初始渲染消耗。因此,如果需要頻繁切換 v-show 較好,如果在運行時條件不大可能改變 v-if 較好。  

另外

    1.v-if 指令可以應用于template包裝元素上,而v-show不支持template

    2.將v-show應用在組件上時,因為指令的優先級 v-else 會出現問題,解決辦法就是用另一個 v-show 替換 v-else

 // 錯誤  <custom-component v-show="condition"></custom-component>  <p v-else>這可能也是一個組件</p>     // 正確做法  <custom-component v-show="condition"></custom-component>  <p v-show="!condition">這可能也是一個組件</p>

解決vue頁面加載時出現{{message}}閃退

方法一:v-cloak

    v-cloak指令和css規則如[v-cloak]{display:none}一起用時,這個指令可以隱藏未編譯的Mustache標簽直到實例準備完畢。
    v-cloak 指令可以像css選擇器一樣綁定一套css樣式然后這套css會一直生效到實例編譯結束。

  eg:    // <div> 不會顯示,直到編譯結束。    [v-cloak]{      display:none;        }    <div v-cloak>       {{ message }}    </div>

方法二:v-text

vue中我們會將數據包在兩個大括號中,然后放到HTML里,但是在vue內部,所有的雙括號會被編譯成textNode的一個v-text指令。

而使用v-text的好處就是永遠更好的性能,更重要的是可以避免FOUC (Flash of Uncompiled Content) ,也就是上面與遇到的問題。

eg:  <span v-text="message"></span>  <!-- same as -->  <span>{{message}}</span>

補充:

vue 頁面加載進度條組件

頁面加載進度條最初我是在youtube上看到的,后面幾乎在各大網站上都能見到它的身影,可以讓用戶在加載頁面的時候不會對著完全空白的頁面發呆,提升用戶體驗

但是從開發角度講,這種進度條在真實性上確實很難把握,因為在邏輯代碼加載完成之前,我們都不能統計到進度,而邏輯代碼自身的進度也無法統計。另外,我們不可能監控到所有資源的加載情況。

事實上,用戶并不是在乎你的頁面究竟加載了百分之幾,而真正關心的是離加載完還有多久,以及這個空白頁面是沒有加載完,還是加載完就是空白的。所以沒我們需要去“模擬”一個進度條,在后端數據返回前利用一個假的動畫效果模擬加載,在數據返回后讀完進度條并且隱藏。

// progress-bar.vue<template> <transition name="fade">  <div class="progress-bar" v-if="isShow">  </div> </transition></template><script type="text/babel"> export default {  data() {   return {    isShow: true, // 是否顯示進度條    val: 0, // 進度   }  },  props: {   /**    * 每10毫秒自增幅度    */   step: {    type: Number,    default: 5,   },   /**    * 初始值    */   initVal: {    type: Number,    default: 0,   },   /**    * 到一定進度停止    */   stopVal: {    type: Number,    default: 80,   },   /**    * 進度條繼續到成功    */   isOk: {    type: Boolean,    default: false,   },  },  mounted() {   // 初始化后加載進度,加載到百分之多少由stopVal決定   this.val = this.initVal   let step = this.step   let timer = setInterval(() => {    this.val = this.val + step    this.$el.style.width = this.val + '%'    // 父組件數據加載完前進度條最多到stopVal的這個百分值    if (this.val >= this.stopVal) {     clearInterval(timer)     return    }   }, 10)  },  watch: {   /**    * 監聽組件props變化決定是否繼續加載,一般在父組件數據加載完后改變此標志位    */   isOk() {    let val = this.val    let step = this.step    let timer = setInterval(() => {     val = val + step     this.$el.style.width = val + '%'     // 加載到百分百完成     if (val >= 100) {      // 關閉定時器      clearInterval(timer)      // 加載完成關閉進度條      this.isShow = false      // 加載完成的回調      this.$emit('callback', 'load success')      return     }    }, 10)   },  }, }</script><style lang="stylus" rel="stylesheet/stylus"> .progress-bar {  position fixed  top 0  height 6px  width 0  background-color #999 } .fade {  &-enter-active, &-leave-active {   transition: all .3s  }  &-enter, &-leave-active {   opacity: 0  } }</style>

總結

以上所述是小編給大家介紹的vue頁面加載閃爍問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通海县| 电白县| 许昌市| 特克斯县| 泗水县| 宁阳县| 通渭县| 崇阳县| 渑池县| 斗六市| 延津县| 龙井市| 台南市| 六枝特区| 讷河市| 固始县| 富阳市| 榆社县| 西吉县| 祁连县| 遵化市| 民乐县| 蓝山县| 砀山县| 普兰县| 辽源市| 舒兰市| 洪泽县| 溆浦县| 南江县| 永德县| 瓦房店市| 华坪县| 柳江县| 从化市| 奎屯市| 建德市| 商河县| 上杭县| 沾益县| 六盘水市|