Vue 編程之路(三)—— Vue 中子組件在父組件的 v-for 循環里,父組件如何調取子組件的事件


  (標題的解決方案在第二部分)

  最近公司的一個項目中使用 Vue 2.0 + element UI 實現一個后台管理系統的前端部分,屬於商城類型。

 

 

一、前期思路:

  其中在“所有訂單”頁面,UI 給的設計頁面如下:

  

  圖 1 - 1 UI 設計圖.png

  UI 理解:每個 Tab 點擊后展現的頁面都是這樣的管理表格,所以這一部分表格寫成組件。一開始采用的寫法是下面這樣的:

  

  圖 1 - 2 前期實現.png

  寫完覺得代碼很繁復,我在實現狀態標識 + 對應的數量時,也發現上述寫法不利於將 label 綁定為動態數值,轉換思路和后端老哥溝通后改造了接口,返回數據的時候添加一下各個狀態及其對應的數量

 

二、最終的實現思路:

  基於簡化代碼的思想,決定將這些 tabs 用循環的方式展現出來,寫法如下:

  

  圖 2 - 1 最終實現.png

  

  圖 2 - 2 定義的 tabList .png

  因為要顯示相應的數量,從接口中拿數據后與 tabList 進行拼接,不過給各位的參考意義不大,處理如下:

  

  圖 2 - 3 處理 tabList .png

  下圖將體現解決方法的核心,那就是帶上對應的數組下標:

  

  圖 2 - 4 何時調用.png

  我采用的邏輯是點擊不同的 Tab 標簽,攜帶不同的參數去請求數據,圖 2 - 4 顯示在返回的數據 order 有變化時,將變化后的 order 傳值給子組件的 getOrderList 方法進行處理。這個時候就要解答標題了,因為 tabs 是循環出來的, console.log(this.$refs.child) 將顯示類似下圖:

   

  圖 2 - 5 console.log(this.$refs.child).png

  可以看出已經成了一個數組,這時候就需要我們加上下標再去調用相應的 tab 子組件方法,如下圖:

  

  圖 2 - 6 確定 tabList 的 index.png

  

三、寫在最后

  1、為何不像 Vue 編程之路(一)——父子組件之間的數據傳遞 中介紹的直接傳值

  直接傳值在前期寫法中嘗試過,那是連請求數據都是在子組件中進行,所以有很多莫名其妙的 bug,比如每次請求數據后會再請求一次全部狀態的數據,導致顯示異常,轉換思路后在父組件請求數據,按 Tab 標簽分發對應的數據,這就需要將 Tab 標簽的數據傳入子組件的方法進行處理。

  2、子組件在父組件中進行 v-for 循環前,因為 this.$refs.child 還不是數組,所以可以直接點出子組件的方法,這也是調用子組件方法的實現方案。

  特殊點的就是子組件在父組件中進行 v-for 循環后, this.$refs.child 會變成一個數組,這時候再調用子組件的方法就要帶上數組的下標了,這個下標如何來,可以參考這篇隨筆第二部分的內容。

 


免責聲明!

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



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