摘要:發現了動態組件異步組件這個東西簡直是救命啊動態組件異步組件思路分析有了動態組件這個東西之后,我們就可以根據綁定不同的值來渲染不同的組件。每個組件要傳給子組件的值和接收子組件的事件也可以動態的綁定上去。
推動我實現這個功能的業務背景
最近接到一個讓我很頭疼的需求:產品要求我們系統頁面上所有的模塊都支持順序的變動。
比如有 模塊A、B、C、D,可以無序的展示在頁面上,我剛聽到這個需求的時候我是崩潰的,如果是在項目開發之前提出這個需求,那么我的前期頁面的架構肯定不會直接寫死的。現在,如果想滿足這個需求,我只能翻掉之前的頁面重新開發.....
目前項目是有八個模塊,我是每個模塊封裝一個多帶帶的組件,然后再index頁面統一引入。
救命稻草
瀏覽了一番vue的官網,還是有所收獲的。發現了動態組件 & 異步組件這個東西!!!簡直是救命啊!!!
動態組件:
異步組件:
思路分析
有了動態組件這個東西之后,我們就可以根據:is綁定不同的值來渲染不同的組件。比如,拿到后臺給我們返回的要渲染組件順序的數組,我們通過循環數組,構建出一個最終我們想要的數據格式。關鍵點在于動態修改 () => import("")里面的值。每個組件要傳給子組件的值和接收子組件emit的事件也可以動態的綁定上去。好了,廢話不多說了,貼代碼吧!
代碼
首先是HTML層:
js層:
import axios from "axios"; import Volume from "com/Volume"; import ServiceStatus from "com/ServiceStatus"; import FixStatus from "com/FixStatus"; export default { name: "about", props: { msg: String }, data() { return { isShow: false, tempList: [], tempData: [], VolumeOptions: "VolumeOptionsValueFromParent ", ServiceStatusOptions: "ServiceStatusOptionsValueFromParent", FixStatusOptions: "FixStatusOptionsValueFromParent" }; }, created() { this.createTempData() }, methods: { // 獲取組件的順序 getTempList() { //這里是我自己用nodejs mock的一個接口,返回的數據在下面貼出來 return axios.get("http://localhost:9999/search/detail").then(res => { return res.data.data }) }, async createTempData() { const result = await this.getTempList(); // 動態修改options綁定的變量 result.forEach((val) => { let key = val.tempName; switch (key) { case "Volume": val.options = this.VolumeOptions break; case "ServiceStatus": val.options = this.ServiceStatusOptions break; case "FixStatus": val.options = this.FixStatusOptions break; } }) this.tempData = result; console.log(this.tempData); this.init() }, init() { // 構建渲染頁面組件的數組 this.tempList = this.tempData.map((value, index) => { return { app: () => import(`com/${value.tempName}`), //異步組件 key: index, props: { options: value.options, //傳給子組件的options }, fn: { change: this.changeTest //接收來自子組件的$emit事件 } }; }); }, changeTest(e) { console.log("監聽子組件得到的值是:" + e) } } };
子組件代碼:
1.Volume組件:
Volume pageprops的值:{{options}}
2.FixStatus組件:
組件名:FixStatus pageprops的值:{{options}}
3.ServiceStatus組件:
組件名:ServiceStatus pageprops的值:{{options}}
接口返回的數據:
{"code":"0000","msg":"請求成功!","data":[{"id":0,"tempName":"ServiceStatus","options":""""},{"id":1,"tempName":"Volume","options":""""},{"id":2,"tempName":"FixStatus","options":""""}]}
data的數組就是我們可以自定義順序的數組。好了,是不是可以隨意的玩起來了!下面看一下demo頁面效果吧。
五百萬項目的效果
可以看到:頁面組件的排列順序就是根據接口返回的順序排列的、每個子組件props得到的值也是可以的、控制臺console是我點擊不同組件,emit給父組件的值。
這是我目前想到最妥當的方案,如果有巨佬有更好的思路,歡迎指導! 扣扣 602353272。
溜了溜了....
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106290.html
摘要:效率不高,很多多余,稱之為臟檢查。通過索引設置數組元素并觸發視圖更新。解決閃爍問題自定義指令自定義指令提供一種機制將數據的變化映射為行為。 Vue特性 Vue只是聚焦視圖層,是一個構建數據驅動的Web界面的庫。 Vue通過簡單 API提供高效的數據綁定和靈活的組件系統 輕量 數據綁定 指令 插件化 架構從傳統后臺MVC 向REST API + 前端MV*遷移DOM是數據的一種自然映...
摘要:在第一版的基礎上進行了優化,新增一些面試題知識點,對一些知識點進行更加深入的描述。可以在該鉤子中進一步地更改狀態,不會觸發附加的重渲染過程。改變中的狀態的唯一途徑就是顯式地提交。這兩個可以在不進行刷新的情況下,操作瀏覽器的歷史紀錄。 在第一版的基礎上進行了優化,新增一些面試題/知識點,對一些知識點進行更加深入的描述。 一、對于MVVM的理解? MVVM 是 Model-View-Vie...
摘要:添加事件偵聽器時使用模式。只當事件是從偵聽器綁定的元素本身觸發時才觸發回調。差別在哪里將特性名轉換為從開始支持語法糖,會擴展成一個更新父組件綁定值的偵聽器。如果需要條件渲染多個元素,可以使用包裹。 1.前言 安裝 直接用 引入(本地或者cdn) npm npm install vue vue-cli官方腳手架 # 全局安裝 vue-cli $ npm install --glo...
摘要:事件總線事件總線首先創建了一個名為的空的實例然后全局定義了組件最后創建了實例。在父組件模板中,子組件標簽上使用指定一個名稱,并在父組件內通過來訪問指定名稱的子組件。 學習筆記:組件詳解 組件詳解 組件與復用 Vue組件需要注冊后才可以使用。注冊有全局注冊和局部注冊兩種方式。 全局注冊 Vue.component(my-component, {}); 要在父實例中使用這個組件,必須要...
閱讀 2955·2023-04-25 22:16
閱讀 2119·2021-10-11 11:11
閱讀 3254·2019-08-29 13:26
閱讀 600·2019-08-29 12:32
閱讀 3419·2019-08-26 11:49
閱讀 2998·2019-08-26 10:30
閱讀 1950·2019-08-23 17:59
閱讀 1514·2019-08-23 17:57