開發業務后臺經常要用到表格里的選擇,全選這種交互。而且不同系統不同場景的UI還不一樣。比如:表格里就是簡簡單單的checkbox;圖片列表這種,UI設計師會搞點花樣,用戶選擇一下,會在圖片上蓋一層半透明的勾選提示等等。我們的系統是用angular 1.X版本開發。所以,我采用angular的裝飾性指令編寫幾個指令,把它們配合在一起使用,來封裝這樣的場景。這與之前我們遇到的組件的開發思路又不太一樣。我們先來分析一下需求及擴展點。
需求分析
設計思路
moSelect指令
封裝全選邏輯的指令。適應場景:
使用方式
<table mo-select="list" select-all-name="isSelectedAll" item-name="item" item-select-name="select" selected-list-name="selectedList" init-selected-list="initSelectedList" allow-multiple-select="false" select-count-limit="2" item-equal-func="itemEqual"> <thead> <tr> <th><input type="checkbox" ng-checked="isSelectedAll" mo-select-all></th> <th>商戶名稱</th> <th>電話</th> <th>地點</th> <th>更新時間</th> <th>播放</th> </tr> </thead> <tbody> <tr ng-repeat="item in list" mo-select-single > <td> <input type="checkbox" ng-checked="item.select" mo-select-single1 > </td> <td>{{item.name}}</td> <td>{{item.tel}}</td> <td>{{item.addr}}</td> <td>{{item.updateTime|msDateFormat:'YYYY-MM-DD'}}</td> <td> <div audio-playable="item.url" play-trigger=".audio-play" pause-trigger=".audio-pause"> <button class="btn btn-primary audio-play" ng-show="!audioInfo.playing" >播放</button> <button class="btn btn-primary audio-pause" ng-show="audioInfo.playing" >暫停</button> </div> </td> </tr> </tbody> </table>說明:
1、主要通過三個指令實現全選相關的代碼封裝;
2、mo-select 是容器指令,定義了全選,以及單選 item 的方法,定義在列表容器dom上;
3、mo-select-all 全選指令。定義在全選 dom 上,一版是一個 input checkbox 。其值表示在當前scope保存的是否全選的變量名;
4、mo-select-single 單選指令。 定義在每一項 dom 上。可以有兩個地方:
如果要獲取已選項,直接在當前scope獲取 selected-list-name 指定的變量名即可。
使用步驟:
注意事項
總結
這樣的指令在我們的業務開發中使用還是很靈活的。可能看起來配置項有點麻煩,其實大多數都是可以采用默認值的。我們看看它的不同表現形式:


代碼不多,200來行,代碼是從項目里摘出來的,不是很復雜,就沒做demo,這里分享出來,代碼鏈接。 有興趣要改進的同學可以拿去隨便改。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答