中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何根據業務封裝自己的功能組件

發布時間:2020-10-03 04:02:41 來源:腳本之家 閱讀:154 作者:木公呢 欄目:web開發

查詢回顯input的封

最近有幸在做一個管理系統采用的是vue+element-ui, 表單頁面非常多, 而且都出奇的大,在多頁面開發的時候做大表單的優缺點我大概先說一下, 我們的任務是, 基于現在的工具, 使他更簡潔, 功能也不差, 而且更利于開發, 維護

直接進入正題

功能是這樣:

表單中常有的功能是一個input綁定一個按鈕, 當我點擊按鈕的時候, 彈出查詢框, 里面有個小列表, 查到數據后點一行再回顯, 很簡單的需求, 但是會有大量的應用地點, 所以肯定不能復制粘貼, 輸入框我們每次都可以寫, 但是彈出來的小查詢如果每個表單, 每個獨立的彈框再去重復寫就麻煩了, 但是如果我們把它提出來我們就輕松很多, 通過數據去控制功能

如何根據業務封裝自己的功能組件

有些人可能覺得都是廢話, 而且就這么個簡單的東西, 寫這么多有必要么(我想盡量的把我想到的說出來, 手動滑稽)

要做的就是這個查詢的小列表, 我們整理一下要做的事情, 先做規劃再寫代碼, 避免邊寫邊改, 不然會讓代碼越來越難維護, 寫到下面發現上面不該那么寫, 再去改又懶的改, 然后就郁悶著勉為其難的提交上去了, 雖然功能在但自己看著都......

1. 分析需求: 我們需要什么元素?

  1. a. 一個form表單, 一個table, 分頁(布局)
  2. b. n個條件框, 查詢按鈕, 重置按鈕, 其他功能按鈕(form內部)

通過整理元素我們知道, 有幾樣東西是固定的, 一個form, 一個不知道幾列的table, 一個分頁功能,查詢, 重置按鈕

整理出這個我們就可以第一步把元素構建全, 可能有n個的我們就用一個先占個位置, 結構如下:

<div class="box">
 <div class="form">
  <form action="">
   <input type="text"> *n
  </form>
 </div>
 <div class="table">
  <table>
   <tr> *n
    <td></td>
   </tr>
  </table>
 </div>
 <div class="paging"></div>
 <div class="button">
  <button>查詢</button>
  <button>重置</button>
  <button>其余功能</button> *n
 </div>
</div>

*n的地方代表了接下來我們要用循環創建

2. 我們需要實現什么方法并且那些是要外部傳遞的

  1. a. 查詢
  2. b. 點擊分頁后查詢數據
  3. c. 重置
  4. d. 選中一行時拿到數據
  5. e. 其余功能的觸發

這樣一梳理, 就很清晰了, 因為我們的查數據和分頁在一個接口中我就講分頁查詢, 和普通查詢放到了一個函數里, 所以methods中實現剩下的四個方法

methods: {
 searchData(pageNum = 0) {
  //查詢數據, ES6參數賦值默認為0頁
 },
 selectRowData(row) {
  //選中單行是觸發的函數, 在各個ui框架table中都應該有這個方法, 我們只要實現它就行了
 },
 resetSearchForm() {
  //重置form參數
 },
 doFunction(){
  //執行其他函數
 }
}

好了, 接下來看看那些需要是外部傳入的方法, 以及為什么要從外部傳入

i. 首先是一個查詢數據的方法

理由: 我們需要從外部傳入, 這是個查詢列表的組件, 我們肯定不是只適用于一個接口, 而是盡量讓他各種各樣情形下都適用于我們

ii. 選中單行后要傳給父組件的方法

在vue中, 子組件是不能修改父組件的, 在框架封裝中大部分是作者自己封裝了dispatch 和 broadcast, 但是我們就應用于自己的項目, 所以我們不用那么麻煩, 如果想用可以去ui框架源碼中復制一份出來用, 我們就通過父組件傳一個函數給子組件, 然后子組件調用這個函數回調給父組件就好了, 所以要傳一個函數

iii. 其他的執行函數

3. 我們要vue的data參數了, 并確定哪些是在組件中, 哪些是外部傳入

a. from表單的數據綁定(但是我們不確定要有幾個框所以這里要多留一步)

沒錯就這一個就夠了, 我們要做的是可動態配置所以更多的來自于傳參

  1. a. 傳入一個input數組, 決定有幾個條件搜索框
  2. b. 傳入table的列的數組, 附帶上每列寬度, 列名
  3. c. 傳入其他功能按鈕列表數組
  4. d. 傳入查詢出來的分頁參數
  5. e. 傳入查詢出來的數據列表數組

4. 有了這些我們接下來就是一一實現這些東西就好了

還是先從結構開始

 <div class="searchAlert">
   <div class="inputBox">
    <el-form :inline="true" :model="searchForm" class="searchAlertForm" ref="searchForm">
    <!--循環創建條件搜索框-->
     <el-form-item v-for="item in inputarr" :key="item.label" :prop="item.dataName">
      <el-tooltip :content="item.label" placement="top">
       <el-input v-model="searchForm[item.dataName]" :placeholder="item.label" size="mini"></el-input>
      </el-tooltip>
     </el-form-item>
    </el-form>
   </div>
   <div class="tableBox">
    <el-table :data="searchdatalist"  size="mini" highlight-current-row
     @current-change="selectrowdata" :border="true">
     <!--循環創建table列-->
     <el-table-column v-for="item in coleumarr" :key="item.label" :prop="item.prop" :label="item.label"
      :width="item.width">
     </el-table-column>
    </el-table>
   </div>
   <!--判斷是否顯示頁碼條-->
   <div class="pagination" v-if="searchpaging">
    <el-pagination layout="prev, pager, next" :total="searchpaging.totalPage" :small="true"
     :page-size="searchpaging.pageSize" @current-change="searchdata">
    </el-pagination>
   </div>
   <div class="buttonBox">
    <el-button size="mini" @click="resetsearchform">重置</el-button>
    <el-button size="mini" @click="searchdata" type="primary">搜索</el-button>
    <el-button size="mini" v-for="btn in buttonArr" :key="btn.name" size="mini" @click="doFunction(btn.name)" :type="btn.type">btn.name</el-button>
   </div>
  </div>

5. 實現可供循環創建的數組結構

a. form(先創建一個, 然后放到數組中就好了)

{
 label:"輸入框的名稱"
 dataName:"作為雙向數據綁定的名字, 同時作為綁定prop的名字"
}

 現在來看我們是不能在這個組件中直接定義好form的model結構的, 我們就要動態創建, 在組件中我們只要創建一個空的對象就好了

b. table-col

{
 label:"列名稱"
 prop:"對應列內容的字段名"
 width:"單列寬度"
}

c. button

{
 name:"事件和按鈕名字",
 type:"按鈕類型"
}

6. 接下來我們去實現我們要傳入的方法

//回顯功能, 可以拿到單選數據
  searchCbFn(rowData) {
   console.log(rowData)
  },
  //查詢功能, 分頁等
  searchFn(formData, pageNum = 0) {
   api({formData:formData, pageData:pageNum}).then(res => {
    console.log(res.data)
    this.searchDataList = res.data.dataList
    //頁面展示 分頁大小控制
    this.searchPaging = { ...pagInfo, pageSize: 5 }
   }).catch(err => {
    throw err;
   })
  }

7. 最后我們就要補齊所有傳入參數

 searchDataList:{}
  searchPaging:{}

最后總結

這是我第一次寫分享問, 所以應該還欠缺寫邏輯, 如果什么不懂, 或者建議, 請多多告訴我, 代碼我放在:https://github.com/wqliusong/happy有組件, 有可以直接運行的單頁面

再說一下我遇到的問題吧, 一個就是vue的雙向數據綁定是可以動態的,提醒一下大家, 對象后加動態的名字要用[], 不能用.的, 注意我的input那里就懂了, data里的參數也可以動態創建的, 有了這些我們可以解決很多問題, 所以我們不用很在意他的初始數據格式

接下來我還會寫一個多行編輯的組件, 雖然很多ui中也有, 但是功能都略顯單一, 可能我們程序員就是只要會1+1=2, 就能解決所有數學難題了的一幫人, 我要嘗試讓他功能豐富一點, 在一個就是關于動態增加驗證條件的一些實現, 希望大家能有點收獲

以上所述是小編給大家介紹的Vue封裝功能組件詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰宁县| 莎车县| 长春市| 揭西县| 舞阳县| 天台县| 久治县| 英德市| 巴彦淖尔市| 叙永县| 同仁县| 湖口县| 汕头市| 扎囊县| 夏河县| 秦皇岛市| 进贤县| 民权县| 青川县| 两当县| 长武县| 毕节市| 淮滨县| 当涂县| 逊克县| 依兰县| 东城区| 南宁市| 太原市| 千阳县| 嫩江县| 余庆县| 金坛市| 丰顺县| 绥滨县| 炉霍县| 怀安县| 来安县| 海丰县| 香港| 沅陵县|