AngularJS - 当其密钥在另一个范围内为真时,更改范围值



我有一个像这样的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}
];

因此,当checktrue时,它会显示为一个🗸,当它为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

最新更新