2016-11-30 2 views
4

私はchecktrueあるときに、それはこの$scope.carsAngularJS - そのキーが別の範囲内で真であるとき、スコープ値を変更するには、

$scope.cars=[ 
    {'model':'Ford','check':true}, 
    {'model':'Honda','check':true}, 
    {'model':'Ferrari','check':true} 
]; 

に基づいて、この

<li ng-repeat="car in cars"> 
    <p>{{car.model}}</p> 
    <span ng-show="car.check"></span> 
    <span ng-show="!car.check">X</span> 
</li> 

のようなNGリピートを持っていますaが表示され、それが偽である場合は、X

私は別の目的のために使用している別の$scope.filterを持っていますが、simpli街私はちょうど私が望む何

$scope.filter = { 
    "producers": { 
    "Ford": true, 
    "Honda": true, 
    "Ferrari": false 
    } 
} 

私は$scope.filter値を変更するたびに、その変更は、ので、この例では$scope.cars(中filter.producers.Ferrari:false場合は、$scope.cars内の対応する要素にはなり反映される)でその内容を書きます自動的に同様に変更する'check':false

あなたはjsfiddle hereを確認することができます事前に感謝!

編集:RipTheJackerによると、問題はフィルターの値に基づいて自動車のチェック値を更新する関数を作成する方法です。

+0

? '$ scope.cars'をプロデューサの変更またはすべての' $ scope.filter'で繰り返すことでこれを達成することができるようです。 – taguenizy

+0

IRLいくつかのチェックボックスを使って変更しますが、例に追加していません理解しやすくする。ですから、私は$ scope.filterの値を手動で変更するだけで、自動的に$ scope.carsの対応する値に影響を与えたいと思います。 – Joe82

+1

明快にするために質問を更新したいかもしれません。実際の問題は、フィルターの値に基づいて自動車のチェック値を更新する関数を作成する方法でした。 – RipTheJacker

答えて

1

更新

私は値を更新するために、元の要件を逃しました。最も簡単な方法は、あなたの範囲からfilterモデルを見ている:

$scope.$watch("filter", function(nv,ov){ 
    angular.forEach($scope.cars, function(car){ 
    car.check = nv.producers[car.model] 
    }) 
}, true) 
+0

私は彼の質問を理解しているので、私は彼が彼のフィルターに従って**値を**変更したいと思うと思う。 – Mistalis

+0

そうです、削除しようとしていました。今すぐ自分のJSフィドルで新しい答えを書く – RipTheJacker

+0

答えがありがたいですが、@Mistalisによると、車のスコープ内の値を変更する必要があります。生産者のスコープの値が変更されたら – Joe82

1

私はあなたのjsFiddleを更新しました。 Angulars' $の範囲で

$scope.checkProducerTrue = function(c) { 
    angular.forEach($scope.filter.producers, function(value, key) { 
     if (key == c.model) c.check = value; 
    }); 
}; 
+0

パーフェクト!それは私が探していたものです。 – Joe82

1

$あなたは変数の変化を "聞く" ことができます見て:

は、基本的にはちょうどにあなたの$scope.checkProducerTrue機能を更新しました。 私はあなたのJSFiddleに基づいて非常に簡単な例を残して...あなたは機能を最適化する必要がありますが、私はその考えがはっきりしていると思います。あなたは `$のscope.filter`ことを変更できますか

$scope.$watch('filter.producers',function(s){ 
 
\t $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)

Link to JSFiddle here

+0

これはおそらく最善のアプローチだと思うが、問題は私が$ scope.filters.producersの内容を(それが別の別のブランドと同じように)できることを知らないので、私はできないだろう( – Joe82

+0

) "cars"形式(JSONの配列)とフィルタ形式が分かっている場合は、javascriptを使用して自動車モデルとフィルタモデルを比較し、フィルタ値を取ることができます。 – TRDrake

+0

Ifこれらの形式に関する詳細情報がある場合は、両方の配列を解析して値と一致する汎用関数を作成することができますので、恥ずかしがり屋で共有しないでください – TRDrake

関連する問題