項目總結(一)配置化前端開發


 

  前端服務化的第一種方式是提供一套組件庫, 如element,iview,ant design,此時開發人員的開發方式為: 在代碼中用組件拼湊頁面, 然后寫代碼邏輯.

  前端服務化的第二種方式, 是提供頁面可視化組裝系統, 這個系統輸出組裝后的前端工程源碼,通過可視化生成模板工程, 開發人員不需要關注前端組件, 只需要編寫代碼邏輯,也有不少框架工具可以參考。

  前端服務化的終極方式, 是直接提供一個開發的 IDE, 將動態邏輯的書寫也在 IDE 中完成。

  可視化搭建的基礎是配置化,將HTML Tree, Data 和 Dynamic Logic有機融合。可視化的交互用來修改配置數據來實現頁面的生成和更新。所以需要首先實現配置化開發,也能大大提高前端開發的效率。

相關模式:

  動態組件根據配置化數據結構,動態渲染響應的組件

  決策樹樹形結構,其中每個內部節點表示一個屬性的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別

  中介者模式:統一管理封裝,多個對象之間的通信依賴。對象不需要顯相互引用,使其耦合松散

 

頁面分區:

  

 

  FilterBox時間單選,級聯,查詢按鈕,生成查詢參數控制下面的數據。

  IndexCardBox:根據FilterBox參數調接口,展示返回所得數據

  trendBox:根據FilterBox篩選參數,和IndexCardBox指標卡的選擇調接口展示趨勢

程序流程:

  

  全局store.js

  1、 導出一個vue的實例,管理頁面各組件之間的狀態和通信,實現頁面輕量級store。

  2、 維護,動態組建的路徑 typeMap。使用vue異步動態組件。配置頁面所需展示的組件樹,動態渲染,實現頁面結構與數據的可配置化。

  3根據中介者模式實現模塊之間的參數依賴。各模塊可向全局發送state狀態,根據stateLoginMap中的依賴關系,收集參數傳入其他模塊,並觸發鈎子函數更新數據。

 

  模塊Box

 

  1、this.$loaded加載狀態:

 

      異步組件,初始化data中loading設false,手動調用this.$loaded(true)轉換狀態;

 

      同步組件,mounted鈎子中自動調用this.$loaded(true)轉換狀態;

 

    this.$loaded(true)標志完成加載並已經向全局發送state狀態,

 

    被依賴的模塊的會在模塊loading狀態全為true后,才能觸paramsChange鈎子.

 

  2、 paramsChange鈎子,接收變化

 

    在依賴state變化后,會組裝成params傳入模塊,觸發模塊的paramsChange鈎子。

 

    從this.store.params中獲取最新的參數,更新數據展示。

 

  3、 this. $commit 提交state變化

 

    觸發全局中 [components]-refresh向頂層發送篩選參數,自定義方法覆蓋storeMixins自動的賦值,合並到全局的state對象中。

  

  模塊Box-filterBox

    組件樹components和動態邏輯logicMap完全由store控制。

    1、 組件樹配置。如下一個簡單下拉選項,可見

      type為組價類型,

      refKey為組件的唯一識別,

      paraKey為組件向全局輸出參數的字段名,

      options為組件展示需要的數據,可以異步賦值

    2、 動態邏輯。有兩種形式

      一種按照決策樹的算法結構,如上logicMap,實現簡單的依賴關系。可實現plus_type篩選組件選擇formal值時,渲染對應數組內的組件;當選擇prob值時,渲染另外狀態的組件。

      更復雜的動態邏輯,在filterBoxRefres鈎子函數中實現。在filterBox的篩選項變化時,會觸發類型為watch的鈎子函數,可修改組件的渲染狀態;在初始化加載完以及點擊查詢按鈕時,會觸發類型為emit的鈎子函數,可以整理參數的結構再下發給依賴的模塊

  組件-selectFilter

    普通模塊可以使用各種通用組件庫,但FilterBox模塊的組件需要自行封裝來匹配模塊的運行。

    1、 this.$updateFilter()向上級模塊發送選擇的值。

      同步或異步初始化完成,選擇變化,顯示隱藏轉換等狀態變化都需要及時調用更新狀態值,便於更新篩選組件之間的動態更新。

    2this.store 獲取配置項,監聽變化及時更新狀態。


免責聲明!

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



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