0

我在Angular js中放入了两个模型

// full device list
$scope.devices = [{id:1, on:true}, {id:2, on:false}, {id:3, on:true}];
// devices with on == true
$scope.devicesOn = $scope.devices.filter(function(t){return t.on==true});

在页面中:

<span>the following {{ devicesOn.length }} of {{ devices.length }} are on</span>
<ul>
  <li ng-repeat='device in devicesOn'>{{device.id}}</li>
</ul>

所以模型devices是动态的。但是devicesOn不是动态的,因为它不是惰性评估。

我知道你可以写一些类似$scope.countOnDevices = function(){return ...}的东西,但这并不理想。还有更优雅的方法来解决这个问题吗?

这就像从RDBMS 中的现有创建一个view(应用过滤器)。wheretable

4

2 回答 2

1

您可以使用观察者来观察设备列表的变化,当列表有任何变化时可以触发逻辑

$scope.$watch('devices', function () {
    $scope.devicesOn = $scope.devices.filter(function (t) {
        return t.on == true
    });
}, true)

Demo

于 2013-09-13T04:05:25.763 回答
0

@sza 的回答效果很好,我还从这里找到了另一个解决方案:

https://groups.google.com/forum/#!topic/angular/3LyIjNroT5c

https://groups.google.com/forum/#!msg/angular/7WY_BmFzd3U/Zd_jHnMu58YJ

ng-repeat='item in filtered = (items | filter:filterExpr)

然后只需使用{{filtered.length}}

演示在这里

于 2013-09-13T04:27:17.877 回答