2016-04-30 109 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