關於vue請求數據打印undefined的原因


首先先解釋原因:

因為同步和異步操作的原因,同步操作總是先執行,異步方法總是在將來的某個結點執行,然而我們不知道這個異步方法何時會來到,這個時候,實際生產中就引入了loading,增加用戶體驗。

情況一:組件請求數據打印undefined

 

 可以看到,mounted方法先執行了,因為他是同步方法,事實上,created也是,還有其它生命周期也是,所以不要懷疑你把數據賦值放在別的生命周期里面就可以拿到值,。

正確思路應該在獲取網路數據里面的then方法里面實現你的賦值:

Article(this.page).then(res => { this.articleArray = res;//把返回的數據賦值給當前組件的變量 console.log("Home的異步方法中看到的值__________") console.log(this.articleArray) console.log("Home的異步方法中看到的值__________") this.flag = true; }) },

 

情況二:父組件向子組件傳遞值時,子組件打印為undefined:

 

其實這個也是異步引起的,分析如下:

(1)因為子組件本身就在父組件當中,當父組件拿到的值的時候,子組件已經存在;

(2)子組件mounted的時候,父組件還沒拿到值,因為父組件異步請求數據還未到達,子組件已經mounted完畢,所以此處打印為空:

 

 

 解決方法在組件中加v-if,默認為false,在數據加載完then函數里面把flag改為true;此時為了用戶體驗,你可以加入loading動畫,告知用戶數據正在加載……

<TextBox  v-if="flag"  :ArticleInfo="articleArray"></TextBox>

 解決:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM