最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

angular寫一個(gè)列表的選擇全選交互組件的示例

 更新時(shí)間:2018年01月22日 10:23:47   作者:houyhea  
本篇文章主要介紹了angular寫一個(gè)列表的選擇全選交互組件的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

開發(fā)業(yè)務(wù)后臺經(jīng)常要用到表格里的選擇,全選這種交互。而且不同系統(tǒng)不同場景的UI還不一樣。比如:表格里就是簡簡單單的checkbox;圖片列表這種,UI設(shè)計(jì)師會搞點(diǎn)花樣,用戶選擇一下,會在圖片上蓋一層半透明的勾選提示等等。我們的系統(tǒng)是用angular 1.X版本開發(fā)。所以,我采用angular的裝飾性指令編寫幾個(gè)指令,把它們配合在一起使用,來封裝這樣的場景。這與之前我們遇到的組件的開發(fā)思路又不太一樣。我們先來分析一下需求及擴(kuò)展點(diǎn)。

需求分析

  1. 實(shí)現(xiàn)單選;
  2. 實(shí)現(xiàn)全選;
  3. 可以設(shè)置允許多選還是單選。如果多選,有最大選擇數(shù)限制;
  4. 實(shí)現(xiàn)跨頁選擇。這里的跨頁選擇指的是切換到下一頁后,還能記住上一頁的選擇。以前我們遇到的選擇往往都是只記住當(dāng)前頁,一旦刷新就清空了。這是一個(gè)不同的地方;
  5. 要求自己定義UI及交互觸發(fā);

設(shè)計(jì)思路

  1. 這里其實(shí)是相同的地方就是選擇的交互邏輯,所以重點(diǎn)考慮如何封裝這個(gè)邏輯。這里的交互邏輯主要是: 2. 點(diǎn)擊全選; 3. 點(diǎn)擊列表item的選擇切換。如果是單選,要清空之前的選擇;如果是多選,要檢查是否超過最大選擇限制;
  2. 再來看一下應(yīng)用場景相同的地方。我們將設(shè)定上下文肯定有一個(gè)list數(shù)組,一個(gè)已選數(shù)組。 因此,我們得到如下的指令。

moSelect指令

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

  1. 有一個(gè)list集合;
  2. 每一個(gè)item是一個(gè)對象;
  3. 跨頁選擇;

使用方式

<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>地點(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>

說明:

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

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

  1. mo-select的 值是scope的 list 對象,與 ng-repeat 里的 items 一致;
  2. item-name :告訴指令,每一項(xiàng)的對象名,指令會通過該名稱在每一項(xiàng)的scope里查找。與ng-repeat里的 item 一致;
  3. select-all-name :全選的狀態(tài)變量。默認(rèn): isSelectedAll
  4. item-select-name : 記錄的每一項(xiàng)對象是否選中的變量名,將會存儲在 item 對象上,為了避免與現(xiàn)有業(yè)務(wù)字段重合,可以配置,也可以不配置,默認(rèn): select ;
  5. selected-list-name :已選對象列表的變量名。默認(rèn): selectedList ;
  6. init-selected-list :初始化選擇對象列表。該變量只用于初始化,類似 vue 組件里的 prop 屬性;
  7. allow-multiple-select :是否允許多選;
  8. select-count-limit :如果允許多選,最多可以選擇多少個(gè)。如果不傳,則無限;
  9. item-equal-func :對象判等函數(shù),用于封裝業(yè)務(wù)對象自己的判等原則。比如:有些場景是根據(jù)id,有些是根據(jù)其他業(yè)務(wù)邏輯。如果不傳,默認(rèn)根據(jù)對象的id屬性;

3、mo-select-all 全選指令。定義在全選 dom 上,一版是一個(gè) input checkbox 。其值表示在當(dāng)前scope保存的是否全選的變量名;
4、mo-select-single 單選指令。 定義在每一項(xiàng) dom 上。可以有兩個(gè)地方:

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

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

使用步驟:

  1. 在容器定義 mo-select ,根據(jù)實(shí)際需求,配置相關(guān)參數(shù)。必須: mo-select , item-name ;
  2. 在需要全選的按鈕 dom 上添加 mo-select-all 指令,不需要配置任何參數(shù);
  3. 在 ng-repeat 的單項(xiàng)模板里,在需要添加單選交互的 dom 上添加 mo-select-single 指令,不需要配置任何參數(shù);
  4. 完成配置。

注意事項(xiàng)

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

總結(jié)

這樣的指令在我們的業(yè)務(wù)開發(fā)中使用還是很靈活的。可能看起來配置項(xiàng)有點(diǎn)麻煩,其實(shí)大多數(shù)都是可以采用默認(rèn)值的。我們看看它的不同表現(xiàn)形式:

代碼不多,200來行,代碼是從項(xiàng)目里摘出來的,不是很復(fù)雜,就沒做demo,這里分享出來,代碼鏈接。 有興趣要改進(jìn)的同學(xué)可以拿去隨便改。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 理解AngularJs篇:30分鐘快速掌握AngularJs

    理解AngularJs篇:30分鐘快速掌握AngularJs

    這篇文章主要介紹了理解AngularJs篇:30分鐘快速掌握AngularJs,詳細(xì)介紹了AngularJs所涉及的知識點(diǎn),有興趣的可以了解一下。
    2016-12-12
  • AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼

    AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼

    這篇文章主要介紹了AngularJS創(chuàng)建一個(gè)上傳照片的指令實(shí)例代碼,需要的朋友可以參考下
    2018-02-02
  • 詳談Angular路由與Nodejs路由的區(qū)別

    詳談Angular路由與Nodejs路由的區(qū)別

    下面小編就為大家?guī)硪黄斦凙ngular路由與Nodejs路由的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • AngularJS內(nèi)建服務(wù)$location及其功能詳解

    AngularJS內(nèi)建服務(wù)$location及其功能詳解

    這篇文章主要為大家詳細(xì)介紹了AngularJS內(nèi)建服務(wù)$location及$location功能,感興趣的小伙伴們可以參考一下
    2016-07-07
  • AngularJS入門教程之靜態(tài)模板詳解

    AngularJS入門教程之靜態(tài)模板詳解

    本文主要介紹AngularJS 靜態(tài)模板,這里整理了相關(guān)的基礎(chǔ)資料,會幫助大家學(xué)習(xí)基礎(chǔ)的AngularJS的基礎(chǔ)知識,有需要的小伙伴可以參考下
    2016-08-08
  • 詳解Angular依賴注入

    詳解Angular依賴注入

    依賴注入(DI -- Dependency Injection)是一種重要的應(yīng)用設(shè)計(jì)模式。Angular里面也有自己的DI框架,在設(shè)計(jì)應(yīng)用時(shí)經(jīng)常會用到它,它可以我們的開發(fā)效率和模塊化程度。&#160;Angular系統(tǒng)中通過在類上添加@Injectable裝飾器來告訴系統(tǒng)這個(gè)類(服務(wù))是可注入的。
    2021-05-05
  • AngularJS基于http請求實(shí)現(xiàn)下載php生成的excel文件功能示例

    AngularJS基于http請求實(shí)現(xiàn)下載php生成的excel文件功能示例

    這篇文章主要介紹了AngularJS基于http請求實(shí)現(xiàn)下載php生成的excel文件功能,結(jié)合實(shí)例形式分析了AngularJS http請求及文件下載等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Angular 4.x 動態(tài)創(chuàng)建表單實(shí)例

    Angular 4.x 動態(tài)創(chuàng)建表單實(shí)例

    本篇文章主要介紹了Angular 4.x 動態(tài)創(chuàng)建表單實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • angular.js+node.js實(shí)現(xiàn)下載圖片處理詳解

    angular.js+node.js實(shí)現(xiàn)下載圖片處理詳解

    這篇文章主要介紹了angular.js+node.js實(shí)現(xiàn)下載圖片處理的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • AngularJS語法詳解

    AngularJS語法詳解

    本文通過示例向大家介紹了AngularJS語法的使用,小伙伴們認(rèn)真研讀下吧,非常的實(shí)用哦。
    2015-01-01

最新評論

桃园县| 鄂托克旗| 长沙市| 偏关县| 肇源县| 读书| 阳东县| 鄂托克旗| 南溪县| 云和县| 贡山| 邵阳市| 禹城市| 景泰县| 台江县| 兰西县| 淅川县| 九寨沟县| 通化县| 象州县| 大方县| 观塘区| 耒阳市| 咸丰县| 光山县| 乐业县| 云安县| 五华县| 孟州市| 呈贡县| 铅山县| 垦利县| 宝清县| 连云港市| 枣庄市| 吴江市| 绥芬河市| 康乐县| 岚皋县| 米林县| 罗甸县|