鍍金池/ 問答/HTML/ vue想要先加載完所有數(shù)據(jù)再渲染頁面

vue想要先加載完所有數(shù)據(jù)再渲染頁面

我的項(xiàng)目使用vue,我的圖片鏈接需要通過接口返回,不想要頁面渲染出來圖片再進(jìn)行刷新。試過在create里面和routebeforenter里面發(fā)請求,但是貌似都沒有用,有人提示我用懶加載,但是我記得懶加載是給一個(gè)占位圖,這個(gè)并不是我想要的效果。我想要一個(gè)空白頁面做過渡,等我的數(shù)據(jù)加載完之后空白頁面消失,頁面直接渲染出來就是所有的東西

圖片描述

圖片描述

圖片描述

圖片描述

回答
編輯回答
拽很帥

beforeRouteEnter肯定能實(shí)現(xiàn)你的需求的,而且我覺得你寫的沒什么問題,你說的圖片位置明顯的刷新的感覺的話你可以在這個(gè)鉤子中加個(gè)loading試試看,或者按樓上說的img.onload方法,但是并不推薦這個(gè)方法,因?yàn)槟阒挥幸粋€(gè)圖片還好操作,如果多張圖片這個(gè)地方就 尷尬了,建議用圖片懶加載。

2018年6月24日 14:23
編輯回答
蝶戀花

routebeforenter 怎么就不行了? 你 next 寫在哪?
實(shí)在不行 v-if 了解一下,等數(shù)據(jù)加載完了再渲染啊

2017年12月25日 14:17
編輯回答
膽怯

v-if 數(shù)據(jù)出來在渲染

2017年8月2日 14:19
編輯回答
壞脾滊

vif判斷~數(shù)據(jù)接收到了再渲染

2018年3月5日 14:39
編輯回答
不歸路

同步加載數(shù)據(jù),在最后一個(gè)請求成功之后再一一賦值即可。
ajax沒法做同步,你需要引入promise,推薦使用官方推薦的axios

例如用axios請求數(shù)據(jù):

data(){
  return{
    data1:'',data2:'',data3:''
  }
}

// methods:
var data1, data2, data3;
axios.get('/user?ID=12345')
 .then(function (res){
   data1 = res.data
 })
 .then(function (res){
   data2 = res.data
 })
 .then(function (res){
   // 最終請求成功
   data3 = res.data
   this.data1 = data1
   this.data2 = data2
   this.data3 = data3
 })
  .catch(function (error) {
    console.log(error);
  });
2017年9月10日 03:18
編輯回答
墻頭草

理論上是在created方法中請求接口是可以的,不知道你的代碼是如何寫的

2018年8月5日 19:27