2014-08-27 30 views
0

我正在嘗試使用Angular Bootstrap's Modal寫入內容。這會在html body的末尾註入一個div,該div不包含在控制器中。結果是我無法通過$ scope訪問綁定,但出於某種原因,我可以將它們寫入模型的視圖。

The code can be found here. 

Link to code on plnkr

在第23行,你會發現在$範圍已成功地寫入,數據綁定到一個輸入。但是,如果您在3秒鐘後編輯輸入,則綁定到它的$ scope會收到警報,但視圖中的更改不會反映出來。我發現這可以通過將模式包裝在自己的控制器中來解決,但是我無法得到我想要做的工作。

是否可以從控制器訪問模型中的更改?

回答

0

我找到了答案,但不明白這個問題,所以如果有人能解釋,我會很感激。

的代碼需要改變:

$scope.data = {}; 
$scope.data.yn = 'this'; 
alert($scope.data.yn); 
setTimeout(function(){alert($scope.data.yn)}, 3000); 

和輸入到:

<input type="text" name="yourName" value="David" data-ng-model="data.yn" /> 

來自:

$scope = {}; 
$scope.yn = 'this'; 
alert($scope.yn); 
setTimeout(function(){alert($scope.yn)}, 3000); 

輸入:

<input type="text" name="yourName" value="David" data-ng-model="yn" /> 
+1

模型應該總是有點。原因多次被可以描述得比我好的人詳細說明。這裏有一個例子:http://nathanleclaire.com/blog/2014/04/19/5-angularjs-antipatterns-and-pitfalls/ – 2014-08-27 12:34:04

+0

謝謝你的鏈接。 – 2014-08-27 12:38:26

1

根據示波器最佳實踐的角度wiki page

範圍繼承通常是直截了當的,你甚至不需要知道它正在發生......直到你嘗試雙向數據綁定(即表單元素,ng模型)到一個基元例如,數字,字符串,布爾)在子作用域內的父作用域上定義。它不能像大多數人所期望的那樣工作。會發生什麼情況是,子作用域會獲取自己的屬性,該屬性會隱藏/隱藏相同名稱的父屬性。這不是AngularJS正在做的 - 這是JavaScript原型繼承的工作原理。新的AngularJS開發人員通常不會意識到ng-repeat,ng-switch,ng-view和ng-include都會創建新的子範圍,所以當涉及這些指令時,問題經常出現。 (請參閱此示例以便快速說明問題。)

通過遵循始終具有'。'的「最佳做法」,可以輕鬆避免此原語的問題。在你的ng模型中 - 觀看3分鐘的價值。 Misko演示了ng-switch的原始綁定問題。

+0

謝謝,這讓我的頭腦更容易一些。 – 2014-08-27 12:42:16

+0

@KohjahBreese偉大的,你得到它的工作,它是有道理的,你能標記任何答案是正確的嗎?挑剔關於未答覆的問題;) – acg 2014-08-28 12:15:02

+0

我會,但我無法選擇我自己的答案另外41分鐘。 – 2014-08-29 11:35:29

相關問題