假设我$scope.someItems
看起来像{key1a: {val:'someval', time:timestamp}, key2a: {val:'someval', time:timestamp}, key3a: {val:'someval', time:timestamp} }}
我还有第二个对象$scope.moreItems
,它看起来像{key1b: {val:'someval', time:timestamp}, key2b: {val:'someval', time:timestamp}, key3b: {val:'someval', time:timestamp} }}
在视图中,我想在按时间戳(时间属性)排序的列表中显示$scope.someItems
和$scope.moreItems
中的所有项目值。
如果您无权修改控制器(因此无法在控制器中组合对象等),您将如何通过视图代码完成此操作。
答案 0 :(得分:0)
正如@tymeJV评论所述,这应该在控制器中完成(记住angular.js控制器实际上是viewModel层,因为angular不是mvc而是mvvm - 所以处理这些数据是完全正确的 view < / strong>在那里进行操作,无需更改数据源,存储在控制器中)。但如果您认为必须查看代码,那么您可以使用指令!
只需将指令传递给两个数组作为attrs。在指令中组合列表并负责订购,过滤等,然后您可以在视图模板中使用指令!非常有棱角的解决方案(对于你可能发明的问题)
答案 1 :(得分:0)
我认为这不仅仅适用于视图代码。 我会使用一些像lodash或下划线的库,并在控制器中执行:
http://jsfiddle.net/WRtqV/304/
<div ng-app ng-controller="MyCtrl">
<ul>
<li ng-repeat="(key, value) in allItems">{{key}}: {{value | json}}</li>
</ul>
</div>
function MyCtrl($scope) {
$scope.someItems = {key1a: {val:'someval', time:1234}, key2a: {val:'someval', time:324234}, key3a: {val:'someval', time:54234} };
$scope.moreItems = {key1b: {val:'someval', time:2423423}, key2b: {val:'someval', time:234234}, key3b: {val:'someval', time:54353453} }
$scope.allItems = _.extend($scope.someItems, $scope.moreItems);
}