2016-04-30 107 views
0

我需要使用显示排序的数据NG-重复。我需要帮助,从这个例子为什么自定义过滤器不能在角度js中工作?

Order by Object key in ng-repeat

倒是相同的钳工,但不能得到正确output.It是不是我的排序名单。

这里是我的代码 http://plnkr.co/edit/qFaBYnwCVTZJZSiw6hdD?p=preview

var app = angular.module('app', []); 

app.controller('MyCtrl',function($scope){ 
    $scope.lines = { 
    "a": {name:"bb"}, 
    "aa":{name: 'aa'}, 
    "zz": {name:"zz"}, 
    "oo":{name: 'oo'}, 
    "kk": {name:"k"}, 
    "j":{name: "a"}, 
    "n": {name:"n"}, 
    "c":{name: "c"} 
} 
}) 
app.filter('toArray', function() { return function(obj) { 
    if (!(obj instanceof Object)) return obj; 
    return _.map(obj, function(val, key) { 
     return Object.defineProperty(val, '$key', {__proto__: null, value: key}); 
    }); 
}}); 

回答

0

var app = angular.module('app', []); 
 

 
app.controller('MyCtrl',function($scope){ 
 
    $scope.lines = { 
 
    "a": {name:"bb"}, 
 
    "aa":{name: 'aa'}, 
 
    "zz": {name:"zz"}, 
 
    "oo":{name: 'oo'}, 
 
    "kk": {name:"k"}, 
 
    "j":{name: "a"}, 
 
    "n": {name:"n"}, 
 
    "c":{name: "c"} 
 
}; 
 
    
 
    $scope.myFilter = function(){ 
 
    var array=[]; 
 
    angular.forEach($scope.lines,function(value,key){ 
 
     array.push(value); 
 
     }); 
 
    return array; 
 
    
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="MyCtrl"> 
 
    <div ng-repeat="(key, line) in myFilter() | orderBy:'name'"> 
 
     <div class="preview">{{line.name}}</div> 
 
    </div> 
 
    </div>

尝试。你应该将对象属性传递给orderBy。

<div ng-repeat="(key, line) in lines | toArray | orderBy:'name'"> 

编辑

您可以使用过滤器controller.like这个

$scope.myFilter = function(){ 
    var array=[]; 
    angular.forEach($scope.lines,function(value,key){ 
    array.push(value); 
    }); 
    return $filter('orderBy')(array, 'name'); 
} 

使用过滤器,你应该注入服务的过滤器。

app.controller('MyCtrl',function($scope,$filter){ 
+0

不工作请检查 – user944513

+0

请参阅片段代码。其工作正常。 –

+0

我们可以使用loadash而不是underscrore – user944513