欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問題及解決

 更新時間:2023年07月03日 09:23:15   作者:美奇開發(fā)工作室  
這篇文章主要介紹了vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue.js數(shù)據(jù)加載完成前顯示原代碼{{代碼}}

分析原因

首先了解HTML的加載順序:

解析html結(jié)構(gòu) → 加載外部腳本和樣式表文件 → 解析并執(zhí)行腳本代碼 → 構(gòu)造html dom模型 → 加載圖片等外部文件 → 頁面加載完畢

得出結(jié)論:

通過以上分析可知,當html加載的時候,就會把{{代碼}} 當成文本加載出來,當vue初始化完成后,才會把{{代碼}}解析成vue的語法。如果把引入vue.js的script放到head里面,那頁面不會出現(xiàn){{代碼}},因為在body之前就把vue引入進來了,vue加載完成了。

解決方法 

1、方式一:使用 v-cloak指令

<div v-cloak>{{msg}}</div>

2、方式二:使用 v-html指令

<div v-html='msg'></div>

3、方式三:使用 v-text指令

<div v-text='msg'></div>

4、方式四:使用template標簽將需要渲染的html包起來

HTML的 <template> 元素是一種用于保存客戶端內(nèi)容的機制,該內(nèi)容在頁面加載時不被渲染,但可以在運行時使用JavaScript進行實例化。

<div id="app"></div>
<!--此處template標簽必須在vue綁定的元素外面定義,并且在頁面中不顯示下面的template標簽中的內(nèi)容-->
<template id="demo">
    <div v-if="flag">{{msg}}<div>
    <div v-else>無數(shù)據(jù)<div>
</template>
<script src="./js/vue.js"></script>
<script>
    let vm = new Vue({
        el:"#app",
        data:{
            msg:"hello world",
            flag:true
        },
        template:"#demo"http://通過該屬性可以將自定義的template屬性中的內(nèi)容全部替換app的內(nèi)容,并且會覆蓋里面原有的內(nèi)容,并且在查看dom結(jié)構(gòu)時沒有template標簽
    });
</script>

vue數(shù)據(jù)未加載完成前顯示loading遮罩

目的

在前后端分離項目中,由于頁面請求和數(shù)據(jù)請求并非同步,所以導致頁面和數(shù)據(jù)不能同時渲染,因此在實際過程中往往采用SSR即服務(wù)端渲染或者請求數(shù)據(jù)時采用遮罩(加載中)的方式提升用戶體驗。

下面我將使用loading遮罩的方式實現(xiàn)更加友好的數(shù)據(jù)加載

參考:https://codepen.io/bartezic/pen/ByqeNq

效果

代碼

1.在App.vue中添加一個<div>

<div>
    <div id="appLoading">
      <div class='lmask'></div>
    </div>
    <div id="app">
      <router-view v-if="isRouterAlive"/>
    </div>
  </div>

2.以下是CSS樣式

.lmask {
  position: absolute;
  height: 100%;
  width: 100%;
  background-color: #000;
  bottom: 0;
  left: 0;
  right: 0;
  top: 0;
  z-index: 9999;;
  opacity: 0.4;
  &.fixed {
    position: fixed;
  }
  &:before {
    content: '';
    background-color: rgba(0,0,0,0);
    border: 5px solid rgba(0,183,229,0.9);
    opacity: .9;
    border-right: 5px solid rgba(0,0,0,0);
    border-left: 5px solid rgba(0,0,0,0);
    border-radius: 50px;
    box-shadow: 0 0 35px #2187e7;
    width: 50px;
    height: 50px;
    -moz-animation: spinPulse 1s infinite ease-in-out;
    -webkit-animation: spinPulse 1s infinite linear;
    margin: -25px 0 0 -25px;
    position: absolute;
    top: 50%;
    left: 50%;
  }
  &:after {
    content: '';
    background-color: rgba(0,0,0,0);
    border: 5px solid rgba(0,183,229,0.9);
    opacity: .9;
    border-left: 5px solid rgba(0,0,0,0);
    border-right: 5px solid rgba(0,0,0,0);
    border-radius: 50px;
    box-shadow: 0 0 15px #2187e7;
    width: 30px;
    height: 30px;
    -moz-animation: spinoffPulse 1s infinite linear;
    -webkit-animation: spinoffPulse 1s infinite linear;
    margin: -15px 0 0 -15px;
    position: absolute;
    top: 50%;
    left: 50%;
  }
}
@-moz-keyframes spinPulse {
  0% {
    -moz-transform:rotate(160deg);
    opacity: 0;
    box-shadow: 0 0 1px #2187e7;
  }
  50% {
    -moz-transform: rotate(145deg);
    opacity: 1;
  }
  100% {
    -moz-transform: rotate(-320deg);
    opacity: 0;
  }
}
@-moz-keyframes spinoffPulse {
  0% {
    -moz-transform: rotate(0deg);
  }
  100% {
    -moz-transform: rotate(360deg);
  }
}
@-webkit-keyframes spinPulse {
  0% {
    -webkit-transform: rotate(160deg);
    opacity: 0;
    box-shadow: 0 0 1px #2187e7;
  }
  50% {
    -webkit-transform: rotate(145deg);
    opacity: 1;
  }
  100% {
    -webkit-transform: rotate(-320deg);
    opacity: 0;
  }
}
@-webkit-keyframes spinoffPulse {
  0% {
    -webkit-transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(360deg);
  }
}

3.此時遮罩層顯示,我們需要當App加載完成后取消遮罩層,即display: none

document.getElementById('app').style.display = 'block';
	document.getElementById('appLoading').style.display = 'none';

4.如何在我們需要的地方調(diào)用呢

我采用的方法是寫一個loading和loaded函數(shù),在分別在請求數(shù)據(jù)前和請求數(shù)據(jù)完成后調(diào)用,因為該功能可能會重復(fù)的使用,所以將其封裝成為一個可以復(fù)用的模塊

在App.vue中寫兩個方法:

provide() {
	    return {
	      loading: this.loading,
	      loaded: this.loaded
	    }
	  },
	  methods: {
		loading() {
		      document.getElementById('app').style.display = 'block';
		      document.getElementById('appLoading').style.display = 'block';
		},
	    loaded() {
	      document.getElementById('app').style.display = 'block';
	      document.getElementById('appLoading').style.display = 'none';
	    }
	  }

上面將這兩個函數(shù)給暴露了出來,在我們需要的地方inject就好

5. 在需要使用的地方調(diào)用

export default {
  inject: ['loading', 'loaded'],
  name: "index",
  created() {
    this.getData()
  },
  methods: {
    getData() {
      this.loading()
      getUserInfo().then(res => {
        this.userInfo = res.data
      }).finally(() => {
        this.loaded()
      })
    }
  }
}

完成 !

實現(xiàn)思路非常簡單,就是請求數(shù)據(jù)之前將遮罩顯示,加載數(shù)據(jù)完成后將遮罩隱藏

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解vue-cli 本地開發(fā)mock數(shù)據(jù)使用方法

    詳解vue-cli 本地開發(fā)mock數(shù)據(jù)使用方法

    這篇文章主要介紹了詳解vue-cli 本地開發(fā)mock數(shù)據(jù)使用方法,如果后端接口尚未開發(fā)完成,前端開發(fā)一般使用mock數(shù)據(jù)。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Vue檢測屏幕變化來改變不同的charts樣式實例

    Vue檢測屏幕變化來改變不同的charts樣式實例

    這篇文章主要介紹了Vue檢測屏幕變化來改變不同的charts樣式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 基于Vue實現(xiàn)HTML轉(zhuǎn)PDF并導出

    基于Vue實現(xiàn)HTML轉(zhuǎn)PDF并導出

    這篇文章主要為大家介紹了三種方法,可以實現(xiàn)將HTML頁面轉(zhuǎn)為PDF并實現(xiàn)下載。文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2022-04-04
  • 詳解?Vue虛擬DOM如何提高前端開發(fā)效率

    詳解?Vue虛擬DOM如何提高前端開發(fā)效率

    這篇文章主要為大家介紹了詳解?Vue虛擬DOM如何提高前端開發(fā)效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Vue3使用MD5加密實戰(zhàn)案例(清晰明了)

    Vue3使用MD5加密實戰(zhàn)案例(清晰明了)

    MD5是一種信息摘要算法(對稱加密),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值,用來確保信息傳輸完整一致性,這篇文章主要給大家介紹了關(guān)于Vue3使用MD5加密的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • vue-element-admin 菜單標簽失效的解決方式

    vue-element-admin 菜單標簽失效的解決方式

    今天小編就為大家分享一篇vue-element-admin 菜單標簽失效的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標記、彈窗顯示定位詳情(完整實例)

    vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標記、彈窗顯示定位詳情(完整實例)

    這篇文章主要介紹了vue中PC端使用高德地圖實現(xiàn)搜索定位、地址標記、彈窗顯示定位詳情,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • vue中的get方法\post方法如何實現(xiàn)傳遞數(shù)組參數(shù)

    vue中的get方法\post方法如何實現(xiàn)傳遞數(shù)組參數(shù)

    這篇文章主要介紹了vue中的get方法\post方法如何實現(xiàn)傳遞數(shù)組參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 使用Vue-neo4j實現(xiàn)繪制三國人物圖譜關(guān)系

    使用Vue-neo4j實現(xiàn)繪制三國人物圖譜關(guān)系

    這篇文章主要介紹了使用Vue-neo4j實現(xiàn)繪制三國人物圖譜關(guān)系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue項目如何安裝引入使用Vant

    Vue項目如何安裝引入使用Vant

    Vant是一個專為移動端設(shè)計的輕量級組件庫,自2017年開源以來,提供了Vue2、Vue3及多平臺版本支持,安裝Vant時需要注意版本兼容問題,Vue3項目應(yīng)安裝最新版Vant3,而Vue2項目則需安裝Vant2,安裝錯誤時,需卸載后重新安裝正確版本
    2024-10-10

最新評論