2つのコントローラを別のものにラップしています。今私は、子スコープが親スコープからプロパティを継承するが、親スコープ変数を更新する方法があることを知っている?これまで私は明らかな解決策を見つけていませんでした。親スコープ変数を更新する
私の状況では、フォーム内にカレンダーコントローラがあります。親のスコープ(フォーム)の開始日と終了日を更新して、フォームに送信時に開始日と終了日が設定されるようにしたいと考えています。
2つのコントローラを別のものにラップしています。今私は、子スコープが親スコープからプロパティを継承するが、親スコープ変数を更新する方法があることを知っている?これまで私は明らかな解決策を見つけていませんでした。親スコープ変数を更新する
私の状況では、フォーム内にカレンダーコントローラがあります。親のスコープ(フォーム)の開始日と終了日を更新して、フォームに送信時に開始日と終了日が設定されるようにしたいと考えています。
あなたが親スコープにオブジェクト(プリミティブではない)を使用する必要があり、その後、あなたは子スコープ
親から直接それを更新することができるようになります。
app.controller('ctrlParent',function($scope){
$scope.parentprimitive = "someprimitive";
$scope.parentobj = {};
$scope.parentobj.parentproperty = "someproperty";
});
チャイルド:
app.controller('ctrlChild',function($scope){
$scope.parentprimitive = "this will NOT modify the parent"; //new child scope variable
$scope.parentobj.parentproperty = "this WILL modify the parent";
});
の作業のデモ:http://jsfiddle.net/sh0ber/xxNxj/
What are the nuances of scope prototypal/prototypical inheritance in AngularJS?
スコープにプリミティブ属性を割り当てると、それは親スコープが持つ属性を持っていても、(おそらくその場で作成)スコープへ常にローカルでを参照してください同じ名前。これは設計上の決定であり、良いIMHOです。
ビューから、親スコープにいくつかのプリミティブ(int型、ブール値、文字列)を変更する必要がある場合、あなたはそれがその範囲内の別のオブジェクトの属性である必要があり、その割り当てが読むことができる:
<a ng-click="viewData.myAttr = 4">Click me!</a>
、それは、順番になります。
myAttr
属性にviewData
オブジェクトを取得します。これも(これがベストプラクティスかに従っているかどうかを確認してくださいではなく)作品
app.controller('ctrlParent',function($scope) {
$scope.simpleValue = 'x';
});
app.controller('ctrlChild',function($scope){
$scope.$parent.simpleValue = 'y';
});
$ scope。$ parent.valueを使うと正しいですが、大抵の場合はうまくいきますが、大規模で複雑なプロジェクトでは管理が難しくなるので、通常は広範囲に使用することをお勧めしません。 –
このタスクを実行すると$scope.$parent
変数を使用しないようにもう一つの方法があります。
親スコープの値を変更する方法を準備し、それを子スコープ内で使用するだけです。このように:
app.controller('ctrlParent',function($scope) {
$scope.simpleValue = 'x';
$scope.changeSimpleValue = function(newVal) {
$scope.simpleValue = newVal;
};
});
app.controller('ctrlChild',function($scope){
$scope.changeSimpleValue('y');
});
また、値の変更をより詳細に制御できます。
また、このメソッドをHTMLの場合でも、<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
のように呼び出すことができます。
親で宣言された変数にアクセスするために、我々は
コントローラでは、子コントローラまたはテンプレートファイルにを$親を使用する必要があります
$scope.$parent.varaiable_name
HTMLテンプレートでカレンダーのコントローラのような
ng-model="$parent.varaiable_name"
音指令でなければなりません。 – Jonah