javascript
  • angularjs
  • sorting
  • angularjs-ng-repeat
  • angularjs-orderby
  • 2016-02-29 58 views 2 likes 
    2

    如何使用select元素对多个字段排序数组?orderBy当在下拉列表中选择多个字段时

    <select ng-model="selectedOrder"> 
        <option value='id'>id</option> 
        <option value='-id'>-id</option> 
        <option value='country'>country</option> 
        <option value='address'>address</option> 
        <option value='["country","-id"]'>country, -id</option> 
        <option value='["-country","address"]'>-country, address</option>   
        </select> 
    
    <ul> 
        <li ng-repeat="detail in details | filter:{country: countryFilter} | orderBy:selectedOrder">{{ detail }}</li>  
    </ul> 
    

    如果我在控制一切为了设置选项是好的:
    $scope.selectedOrder = ["country", "-id"];

    如果选择选项“的国家,-id”或“-country,地址”,然后排序没有发生。

    这里http://plnkr.co/edit/w968MMN3qT9AB4XXRosV?p=preview

    回答

    1

    完整的示例指定在控制器的不同的选择,它会平稳运行这种方式。我不认为valueoption属性可以包含任何类型的对象。

    var app = angular.module('plunker', []); 
     
    
     
    app.controller('MainCtrl', function($scope) { 
     
    
     
    
     
        $scope.options = [{ 
     
        label: "id", 
     
        value: "id" 
     
        }, { 
     
        label: "-id", 
     
        value: "-id" 
     
        }, { 
     
        label: "country", 
     
        value: "country" 
     
        }, { 
     
        label: "address", 
     
        value: "address" 
     
        }, { 
     
        label: "country, -id", 
     
        value: ["country", "-id"] 
     
        }, { 
     
        label: "-country, address", 
     
        value: ["-country", "address"] 
     
        }]; 
     
    
     
    
     
        // all countries 
     
        $scope.details = [{ 
     
        id: 1, 
     
        country: 'Finland', 
     
        address: 'Mainstreet 2' 
     
        }, { 
     
        id: 2, 
     
        country: 'Mexico', 
     
        address: 'Some address 1' 
     
        }, { 
     
        id: 3, 
     
        country: 'Canada', 
     
        address: 'Snowroad 45' 
     
        }, { 
     
        id: 4, 
     
        country: 'Finland', 
     
        address: 'Rainbow 12' 
     
        }, { 
     
        id: 5, 
     
        country: 'Canada', 
     
        address: 'Beverly 15' 
     
        }, { 
     
        id: 6, 
     
        country: 'Mexico', 
     
        address: 'Some address 3' 
     
        }]; 
     
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.0/angular.js"></script> 
     
    <!DOCTYPE html> 
     
    <html ng-app="plunker"> 
     
    
     
    <head> 
     
        <meta charset="utf-8" /> 
     
        <title>AngularJS Plunker</title> 
     
        <script> 
     
        document.write('<base href="' + document.location + '" />'); 
     
        </script> 
     
        <link href="style.css" rel="stylesheet" /> 
     
        <script data-semver="1.4.9" src="https://code.angularjs.org/1.4.9/angular.js" data-require="[email protected]"></script> 
     
        <script src="app.js"></script> 
     
    </head> 
     
    
     
    <body ng-controller="MainCtrl"> 
     
        <div> 
     
        <label>Country filter</label> 
     
        <input type="text" ng-model="countryFilter" /> 
     
    
     
        <label>Order by</label> 
     
        <select ng-model="selectedOrder" ng-options="option.label for option in options"> 
     
    
     
        </select> 
     
        </div> 
     
        <ul> 
     
        <li ng-repeat="detail in details | filter:{country: countryFilter} | orderBy:selectedOrder.value">{{ detail }}</li> 
     
        </ul> 
     
    </body> 
     
    
     
    </html>

    相关问题