国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

angular如何實(shí)現一個(gè)列表的選擇全選交互組件

發(fā)布時(shí)間:2021-07-27 11:48 來(lái)源:億速云 閱讀:0 作者:小新 欄目: web開(kāi)發(fā)

這篇文章給大家分享的是有關(guān)angular如何實(shí)現一個(gè)列表的選擇全選交互組件的內容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

需求分析

  1. 實(shí)現單選;

  2. 實(shí)現全選;

  3. 可以設置允許多選還是單選。如果多選,有最大選擇數限制;

  4. 實(shí)現跨頁(yè)選擇。這里的跨頁(yè)選擇指的是切換到下一頁(yè)后,還能記住上一頁(yè)的選擇。以前我們遇到的選擇往往都是只記住當前頁(yè),一旦刷新就清空了。這是一個(gè)不同的地方;

  5. 要求自己定義UI及交互觸發(fā);

設計思路

  1. 這里其實(shí)是相同的地方就是選擇的交互邏輯,所以重點(diǎn)考慮如何封裝這個(gè)邏輯。這里的交互邏輯主要是: 2. 點(diǎn)擊全選; 3. 點(diǎn)擊列表item的選擇切換。如果是單選,要清空之前的選擇;如果是多選,要檢查是否超過(guò)最大選擇限制;

  2. 再來(lái)看一下應用場(chǎng)景相同的地方。我們將設定上下文肯定有一個(gè)list數組,一個(gè)已選數組。 因此,我們得到如下的指令。

moSelect指令

封裝全選邏輯的指令。適應場(chǎng)景:

  1. 有一個(gè)list集合;

  2. 每一個(gè)item是一個(gè)對象;

  3. 跨頁(yè)選擇;

使用方式

<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>商戶(hù)名稱(chēng)</th>
                <th>電話(huà)</th>
                <th>地點(diǎn)</th>
                <th>更新時(shí)間</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>

說(shuō)明:

1、主要通過(guò)三個(gè)指令實(shí)現全選相關(guān)的代碼封裝;

2、mo-select 是容器指令,定義了全選,以及單選 item 的方法,定義在列表容器dom上;

  1. mo-select的 值是scope的 list 對象,與 ng-repeat 里的 items 一致;

  2. item-name :告訴指令,每一項的對象名,指令會(huì )通過(guò)該名稱(chēng)在每一項的scope里查找。與ng-repeat里的 item 一致;

  3. select-all-name :全選的狀態(tài)變量。默認: isSelectedAll

  4. item-select-name : 記錄的每一項對象是否選中的變量名,將會(huì )存儲在 item 對象上,為了避免與現有業(yè)務(wù)字段重合,可以配置,也可以不配置,默認: select ;

  5. selected-list-name :已選對象列表的變量名。默認: selectedList ;

  6. init-selected-list :初始化選擇對象列表。該變量只用于初始化,類(lèi)似 vue 組件里的 prop 屬性;

  7. allow-multiple-select :是否允許多選;

  8. select-count-limit :如果允許多選,最多可以選擇多少個(gè)。如果不傳,則無(wú)限;

  9. item-equal-func :對象判等函數,用于封裝業(yè)務(wù)對象自己的判等原則。比如:有些場(chǎng)景是根據id,有些是根據其他業(yè)務(wù)邏輯。如果不傳,默認根據對象的id屬性;

3、mo-select-all 全選指令。定義在全選 dom 上,一版是一個(gè) input checkbox 。其值表示在當前scope保存的是否全選的變量名;
4、mo-select-single 單選指令。 定義在每一項 dom 上??梢杂袃蓚€(gè)地方:

  1. 定義在自己的 input chebox 上

  2. 定義在 input 的容器上。類(lèi)似 tr ,實(shí)現點(diǎn)擊整行選中。也可以定義在某個(gè)單個(gè)元素上。

如果要獲取已選項,直接在當前scope獲取 selected-list-name 指定的變量名即可。

使用步驟:

  1. 在容器定義 mo-select ,根據實(shí)際需求,配置相關(guān)參數。必須: mo-select , item-name ;

  2. 在需要全選的按鈕 dom 上添加 mo-select-all 指令,不需要配置任何參數;

  3. 在 ng-repeat 的單項模板里,在需要添加單選交互的 dom 上添加 mo-select-single 指令,不需要配置任何參數;

  4. 完成配置。

注意事項

  1. mo-select 的值一定要和ng-repeat的 items 一致;

  2. item-name 的值一定要和ng-repeat的 item 一致;

總結

這樣的指令在我們的業(yè)務(wù)開(kāi)發(fā)中使用還是很靈活的??赡芸雌饋?lái)配置項有點(diǎn)麻煩,其實(shí)大多數都是可以采用默認值的。我們看看它的不同表現形式:

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

国产九九久久99精品影院| 色欲天天婬色婬香视频综合网| 国产成人综合日韩精品无码| 久久久亚洲欧洲日产国码ΑV| 久久99国产综合精品女同| 亚洲成AV人片一区二区三区|