2013-04-10 80 views
18

時首先和最重要的plunker ngModel沒有更新。角稱爲內ngInclude

我有一個ng-include包括一個部分。

裏面的部分我有一個ngModel AND指令的文本輸入。

該模型在include中相應更新,但include之外的任何交互都會被忽略。 {{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 – 2013-04-10 22:45:38

回答

30

而不是使用初始值來定義變量,使其成爲一個對象。

$scope.model={test:''}; 

指令爲每個項目創建自己的作用域。如果將原語等同於新的作用域變量,則它與原始文本沒有綁定關係,但是當原始文件是對象時,將創建引用而不是副本,並且在其中創建的引用會反映在其他引用中。說明性例子:

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

非常簡單,我一直都知道這一點,但我從來不明白原因。感謝這篇文章。它肯定會在他們的網站上獲得更多的代表。 – 2013-04-10 23:44:58

+0

謝謝,你節省了我的幾個小時。 – 2015-03-10 12:48:20

+0

維基鏈接不再有效。 – Neel 2015-06-24 21:03:42

5

John Lindquist對此有一個video。儘管他沒有完全解釋爲什麼你需要使用一個對象。

基本上有一個新的非隔離範圍每次父範圍的每一個屬性複製到新的範圍和,作爲@charlietfl解釋的,複製原始類型創建一個「複製」,而是使用對象你得到的是一個參考,因此變化是全球

1

ng-include創建它自己的範圍,它不同於外部範圍。使用this.test而不是$scope.test內部的ng-include模板。它會正常工作。