我有一个像这样的ng重复
<li ng-repeat="car in cars">
<p>{{car.model}}</p>
<span ng-show="car.check">🗸</span>
<span ng-show="!car.check">X</span>
</li>
基于此$scope.cars
$scope.cars=[
{'model':'Ford','check':true},
{'model':'Honda','check':true},
{'model':'Ferrari','check':true}
];
因此,当check
为 true
时,它会显示为一个🗸,当它为false时,x
我有另一个$scope.filter
(我用于其他目的,但是为了简单起见,我只会写下它的内容)
$scope.filter = {
"producers": {
"Ford": true,
"Honda": true,
"Ferrari": false
}
}
我想要的是,每当我更改$scope.filter
值时,该更改都会反映在$scope.cars
中(在此示例中,如果filter.producers.Ferrari:false
,$scope.cars
中的相应元素也会自动更改为'check':false
您可以在此处检查JSFiddle,谢谢!
编辑:正如RiptheJacker所说,问题是关于如何根据过滤器值更新汽车检查值的函数。
update
我错过了更新值的原始要求。最简单的方法是从您的范围观看filter
模型:
$scope.$watch("filter", function(nv,ov){
angular.forEach($scope.cars, function(car){
car.check = nv.producers[car.model]
})
}, true)
我已经更新了您的jsfiddle。
基本上只是将您的$scope.checkProducerTrue
功能更新为:
$scope.checkProducerTrue = function(c) {
angular.forEach($scope.filter.producers, function(value, key) {
if (key == c.model) c.check = value;
});
};
带有Angulars的$ scope。$ Watch您可以"收听"变量的更改。我为您提供一个基于您的JSFIDDLE的非常简单的示例...您应该优化该功能,但我认为这个想法很清楚。
$scope.$watch('filter.producers',function(s){
$scope.cars[0].check = $scope.filter.producers.Ford;
$scope.cars[1].check = $scope.filter.producers.Honda;
$scope.cars[2].check = $scope.filter.producers.Ferrari;
},true)
链接到JSFIDDLE