angular 過濾加排序

  程序設計分析

  首先,若是要是先查詢過濾,就要使用到AngularJS中的 過濾器filter 了。javascript

  直接在表達式的後面使用管道命令符 | ,按照下面的寫法就能夠達到一個過濾的效果:html

{{ persons | filter:query }}

  經過使用filter實現過濾操做,query是查詢過濾時輸入的字符串。java

  相似地,使用orderBy就能夠實現排序的功能:spring

{{ persons | filter:query | orderBy:order }}

  上面的查詢以及排序涉及到兩個變量,query和order。在這裏直接使用ng-model實現數據的綁定便可:數組

            Search:<input ng-model="query">
            Sort by:<select ng-model="order">
                <option value="name">name</option>
                <option value="age">age</option>
            </select>

 

  AngularJS是一門基於DOM的框架語言,所以不須要實現任何的監聽器以及事件觸發器,當query所在的輸入框發生任何改變時,就會觸發輸入框與下面的表達式展示的雙向刷新!app

  相比於其餘的一些框架,是基於字符串經過DOM節點innerHTML添加到DOM中,AngularJS的實現方式加快了模型與視圖的展示。而且減小了大量沒必要要的監聽器啊觸發器啊之類的代碼的編寫,真正實現了相似spring的效果~框架

 

  數據的展示,能夠經過ng-repeat實現。當網頁解析到ng-repeat的時候,會爲每個數組中的元素都克隆一份標籤,進行編譯解析。ide

  

複製代碼
       <ul class="persons">
                <li ng-repeat="person in persons | filter:query | orderBy:order">
                    {{person.name}}
                    
                    {{person.age}}
                </li>
            </ul>
複製代碼

 

  剩下的工做就是須要在script中進行perons數組的初始化:ui

複製代碼
        <div ng-controller="ctl">
                    ...
        </div>
        <script type="text/javascript">
            function ctl($scope){
                $scope.persons = [
                    {"name":"xingoo","age":25},
                    {"name":"zhangsan","age":18},
                    {"name":"lisi","age":20},
                    {"name":"wangwu","age":30}
                ];
                $scope.order = "age";
            }
        </script>    
複製代碼

  代碼以及結果

  最後貼上所有的代碼:spa

複製代碼
<!doctype html>
<html ng-app>
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script>

    </head>
    <body>
        <div ng-controller="ctl">
            Search:<input ng-model="query">
            Sort by:<select ng-model="order">
                <option value="name">name</option>
                <option value="age">age</option>
            </select>

            <ul class="persons">
                <li ng-repeat="person in persons | filter:query | orderBy:order">
                    {{person.name}}
                    
                    {{person.age}}
                </li>
            </ul>
        </div>
        <script type="text/javascript">
            function ctl($scope){
                $scope.persons = [
                    {"name":"xingoo","age":25},
                    {"name":"zhangsan","age":18},
                    {"name":"lisi","age":20},
                    {"name":"wangwu","age":30}
                ];
                $scope.order = "age";
            }
        </script>
    </body>
</html>
複製代碼

  使用結果:

  在默認狀況下,使用age進行排序:

  經過選擇則能夠使用name排序

  再輸入字符的時候,會自動過查詢過濾掉一些選項

相關文章
相關標籤/搜索