我将两个模型放入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
创建where
(应用table
过滤器)。
答案 0 :(得分:1)
您可以使用观察者观察设备列表的更改,当列表有任何更改时可以触发逻辑
$scope.$watch('devices', function () {
$scope.devicesOn = $scope.devices.filter(function (t) {
return t.on == true
});
}, true)
的 Demo 强>
答案 1 :(得分: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}}
demo here