2013-04-21 7 views
5

2つの選択ボックスがあり、最初の選択ボックスが変更されたときに2番目の選択ボックスが自動的に更新されます。ng-repeatを含むselectでng-changeをトリガーする方法

[ 
    {region: "Europe", countries: [{country: "France"}, {country: "UK"}/*, ...*/]}, 
    {region: "Africa", countries: [{country: "Cameroon"}, {country: "Algeria"}]} 
    /*, ...*/ 
] 

このすべては罰金このように動作します:

<label>Region</label> 
<select ng-model="region" 
     ng-change="clear(1)" 
     ng-options="l.region for l in locations" 
></select> 
<br /> 
<label>Country</label> 
<select ng-model='country' 
     ng-change="clear(2)" 
     ng-options="c.country for c in region.countries" 
></select> 

私の場所は次のようになりますJSONオブジェクトです。

最初の選択ボックスの値をヨーロッパに設定したいときに複雑になり、2番目の選択ボックスでng-changeイベントをトリガーしたいと思います。

これはどのように行うのですか?

答えて

5

ng-changeイベントを2番目の選択ボックスでトリガーしたい場合は、モデルregionが変更された場合と同じです。だからあなたはそれを達成するためにウォッチャーを使うことができます。

$scope.$watch('region', function (newValue, oldValue) { 
    console.log(newValue, oldValue); 
}) 
+0

私はこれをコントローラに入れていますか?これは悪い習慣のどこかで読んだことがあります。スコープ。$ watchはディレクティブ用ですね。 – Ant

+2

あなたのoldValueとnewValueがスイッチアップされ、ちょうどそれがテストされました –

+0

@ J-Dizzle No.質問に答えた時点で、パラメータは正しいです。後でangularjsチームがそれらを交換しました。 – zsong

1

コントローラから手動で関数を呼び出すことができるときに、なぜonchangeイベントをトリガーしたいのですか?また、ng-modelで指定したプロパティの値を手動で設定でき、その値がselect要素に反映されることを忘れないでください。

+0

私は手動でNG-モデルに値を設定すると、NG-変更イベントが(http://docs.angularjs.org/api/ng.directive:ngChangeを参照)がトリガされることはありません。私はあなたが「あなたのコントローラから関数を呼び出す」という意味を理解していません。 – Ant

関連する問題