2013-04-10 15 views
18

まず内部で呼び出されたときに更新されないngModel一に、plunker:http://plnkr.co/edit/v1uTz5角度は - ngInclude

は、これは私がに実行している問題の作業のデモです。

私はng-includeに部分的に含まれています。

部分の中には、ngModel ANDディレクティブのテキスト入力があります。

モデルはインクルード内で更新されますが、インクルード外の対話は無視されます。インクルード外の{{test}}は更新されませんが、内部の{{test}}は更新されます。

このディレクティブは呼び出されるとenterキーを処理し、正しいスコープと機能を呼び出します。ただし、$scope.test変数は更新されていませんが、$scope.testFinalが更新され、ng-includeテンプレートが適切にレンダリングされます。 $scope.testモデルをリセットしようとしても動作しません。

ここに何か不足していますか?または、これは指令またはng-includeのバグですか?

+0

参照してください。http://stackoverflow.com/questions/11412410/angularjs-losing-scope-when-using-ng-include –

答えて

30

変数を定義するためにプリミティブを使用する代わりに、それをオブジェクトにします。

ディレクティブは、各アイテムごとに独自のスコープを作成します。プリミティブを新しいスコープ変数と同じにすると、元のオブジェクトにはバインドされませんが、オブジェクトがコピーではなく参照が作成され、一方で変更が反映されます。

シンプル説明例:

var a ='foo'; 
var b= a; 
/* now change a*/ 
a='bar'; 
alert(b) // is still 'foo' 

は現在のオブジェクトと同じ操作を行います。

var obj_1= {a:'foo'}; 
var obj_2=obj_1; 
/* now change obj_1.a*/ 
obj_1.a='bar'; 
alert(obj_2.a) // change to obj_1 will also change obj_2 and alert returns "bar"*/ 

Your Plunker Modified

Read this article on angular wiki for more detailed explanation

+1

非常にシンプルで、私はこれをすべて知っていましたが、理由を理解できませんでした。記事をありがとう。それは間違いなく自分のサイトでより多くの担当者を取得する必要があります。 –

+0

ありがとうございました。 –

+0

角度ウィキリンクはもはや有効ではありません。 – Neel

5

John Lindquistは約videoです。彼はあなたがなぜオブジェクトを使う必要があるのか​​についてはあまり説明していませんが。基本的には、新たな非絶縁余地があるたびに、親スコープのすべてのプロパティがプリミティブ型をコピーし、@charlietflが説明したように、新しいスコープにコピーされ

本当に「コピー」を作成しますが、オブジェクトとあなたが得るものは参考になるので、変更はです。です。

1

ng-includeは、独自のスコープを作成し、それは外側のスコープとは異なります。 $scope.testの代わりにthis.testng-includeテンプレート内に使用してください。正常に動作します。