2015-09-07 77 views
1

對象的ID我想他的特定對象「ID」命令對象的ng-repeat的結果。這個命令是在一個數組所以我做了這個自定義過濾器ng-repeat="line in dataObject|objectIdFilter:orderByArray"AngularJs NG-重複ORDERBY在陣列

.filter('objectIdFilter', [function() { 
    return function(inputObjet, orderArray) { 
     var result = []; 
     angular.forEach(orderArray, function(value) { 
      result.push(inputObjet[value]); 
     }); 
     console.log(result); 
     return result; 
    } 
}]) 

而這與對象的例子基本控制器和訂單ID在數組中:

.controller('MainCtrl', ['$scope', function($scope) { 

    $scope.dataObject = { 
    1: {username:'user1'}, 
    10: {username:'user10'}, 
    20: {username:'user20'}, 
    500: {username:'user500'} 
    }; 

    $scope.orderByArray = [20,10,1,500]; 

}]) 

隨着他的HTML:

<div ng-app="myApp"> 
    <div ng-controller="MainCtrl"> 
     <div ng-repeat="line in dataObject|objectIdFilter:orderByArray">{{line.username}}</div> 
    </div> 
</div> 

的jsfiddle:https://jsfiddle.net/infnadanada/tLrx4uro/

所以...

  • 所有好的工作,但我不知道是否有另一種方式來訂購NG重複像我一樣不使用自定義過濾器。

  • ,以及如果你去的jsfiddle在瀏覽器控制檯,您可以看到我的自定義過濾器是如何恢復2倍的結果,我不知道爲什麼。

PD:英語不是我的第一語言:d

感謝

+0

請參閱您的第二個問題 http://stackoverflow.com/questions/9682092/databinding-in-angularjs – intekhab

+0

@intekhab是用於數據綁定的問題? '應用'的'diggest'是..?所以這是一個本地問題?我能做些什麼來解決這個問題嗎? – nada

+0

我會在控制器做同樣作爲過濾器創建js函數「objectIdFilter」確實,一旦調用它,因爲過濾器獲取調用每次你做的東西收集時間。 –

回答

1

有可能是另一種很好的方法,但你可以過濾你的控制器內的數據,而無需使用過濾器。通過使用這個,你可以防止角度調用過濾器兩次。

$scope.dataObject = { 
    1: {username:'user1'}, 
    10: {username:'user10'}, 
    20: {username:'user20'}, 
    500: {username:'user500'} 
    }; 
    $scope.orderByArray = [20,10,1,500]; 
    $scope.result = []; 
    angular.forEach($scope.orderByArray, function(value) { 
     $scope.result.push($scope.dataObject[value]); 
    }); 
}]); 

在模板中

<div ng-app="myApp"> 
    <div ng-controller="MainCtrl"> 
     <div ng-repeat="line in result">{{line.username}}</div> 
    </div> 
</div> 
+0

它似乎是正確的一步。謝謝! – nada

1

其他方式:您可以通過map迭代:https://jsfiddle.net/sherali/tLrx4uro/2/

$scope.dataObject = { 
    1: {username:'user1'}, 
    10: {username:'user10'}, 
    20: {username:'user20'}, 
    500: {username:'user500'} 
    }; 
    $scope.orderByArray = [20,10,1,500]; 
    $scope.result = $scope.orderByArray.map(function(value){ 
     return $scope.dataObject[value]; 
    }); 
+1

這是一個有效的答案,但我搜索了一點什麼可以更好,我發現http://jsperf.com/map-foreach我不知道這是否可以有效的'angular.forEach'我將調查多一點:D謝謝 – nada

+0

@nada。感謝上面的鏈接。我也不知道 –

+0

也,我研究以上foreach(角度和本地)。我發現:https://jsperf.com/angular-foreach-vs-native-for-loop/3 –