AngularJs-如何在视图中组合两个$ scope属性并按时间戳排序?

时间:2014-03-07 20:36:03

标签: angularjs

假设我$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中的所有项目值。

如果您无权修改控制器(因此无法在控制器中组合对象等),您将如何通过视图代码完成此操作。

2 个答案:

答案 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);
}