5

I found this thread in which the OP's original fiddle where an ng-included scope doesn't modify its parent scope.

One of the replies suggests:

It is ugly and unpredictable, so i recommend you to wrap your data in an object variable: http://jsfiddle.net/e5rfP/3/

which seems to work. Why is this?

4

2 に答える 2

7

オブジェクト変数が機能するのは、JavaScript のプロトタイプの継承が機能するためです。ngInclude は独自の子スコープを作成します。この子スコープは、典型的には親スコープから継承します。

JavaScript では$scope.x = 22、子スコープに次のようなものを記述すると、子 $scope にプロパティが作成xされ、値 22 が割り当てられます。ここではプロトタイプ チェーンは参照されないため、親 $scope は何が起こったかわかりません。

子スコープのようなものを書くとき、JavaScriptが子 $scope でオブジェクトを$scope.someObj.prop1 = 22見つけられない場合、プロトタイプ チェーンを参照し、チェーンの次の $scope は親 $scope です。someObj親 $scope に存在する場合someObj、親 $scope が変更されます。

コメントで述べたように、次の SO の質問と回答は、これをすべてより詳細に説明しています (多くの写真付き): AngularJS におけるスコープ プロトタイプ/プロトタイプ継承のニュアンスは何ですか?

于 2013-02-20T04:10:21.280 に答える
0

このディレクティブは、新しいスコープを作成せずにパーシャルを含めます。たとえば、パーシャルでフォームを作成し、親コントローラーからそのフォームを制御できます。

これは、私が作成したレポへのリンクです。

私はこの答えに基づいて答えましたので、 頑張ってください:-)

于 2014-10-06T21:33:48.700 に答える