我有這個repro http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq顯示當我點擊'標題3'並在文本框中輸入一個值,雖然輸入的值顯示反映在用戶界面,當我點擊'點擊'按鈕的範圍屬性$ scope.test沒有任何內容。angularjs-ng-switch不綁定ng-model
我不知道ng-switch有什麼問題,或者我做錯了什麼。幫助表示讚賞!
http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq
我有這個repro http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq顯示當我點擊'標題3'並在文本框中輸入一個值,雖然輸入的值顯示反映在用戶界面,當我點擊'點擊'按鈕的範圍屬性$ scope.test沒有任何內容。angularjs-ng-switch不綁定ng-model
我不知道ng-switch有什麼問題,或者我做錯了什麼。幫助表示讚賞!
http://embed.plnkr.co/nVCmukG5abpi1Y4ZHkrq
這是一個範圍內的繼承問題,由於ng-switch
創建其自己的範圍。
經常提出的一個建議是在模型上始終使用dot
。原因在於,當控制器作用域項目是對象而不是基元時,子作用域將創建對初始對象的引用。如果模型是原始的,它將不會更新原始模型。
例如:
<input ng-model="test.value" placeholder="pre" type="text" />
$scope.test={value:''}
另一種方法是使用$parent
在HTML模型標記:
<input ng-model="$parent.test" placeholder="pre" type="text" />
使用dot
方法是一個很好的做法,以避免這些問題,你不不需要考慮更深的嵌套範圍。
使用test.value
爲模型演示:http://plnkr.co/edit/CkiF55bLXsYzR6ZjcrJp?p=preview
關於模型dot
引用(讀寶貴):https://github.com/angular/angular.js/wiki/Understanding-Scopes
這是因爲你實際上創建NG-開關內部的子範圍。因此,屬於ngSwitch指令的作用域上存在另一個test
屬性。它最初將顯示來自其父範圍的值,但是當您編輯它時,由於它是原始的,它只會編輯子項上的值,而不是父項。原型繼承在這裏不起作用(但這就是我們需要的)。
當您單擊該按鈕時,該按鈕正在alerting/console.logging父範圍上的屬性...子項無法更改。
爲了解決這個問題使用$parent.test
在你ngSwitch您的NG-模型屬性:
一個片段:
<span class="pew" ng-switch-when="title2">
<input ng-model="$parent.test" placeholder="pre" type="text" />
{{test}}
</span>
我遇到類似的問題,我已經通過在控制器創建一個範圍變量求解並用於ng-include
和ng-switch
。這樣,如果你深嵌ng-include
與ng-switch
並繼續,我們仍然可以直接使用該範圍變量。
由於所有子作用域(在這裏,ng-include
/ng-switch
)從父範圍(通常,控制器範圍)延伸,我們可以在這些子作用域訪問父範圍直接沒有問題。
使用$parent
需要寫這樣$parent.$parent.$parent.someProp
任何理由這種行爲?我花了三個小時試圖找出它,因爲我改變了手動顯示/隱藏我的兩個相同數據的視圖到ng-switch3天和3個源代碼控制版本之前,一切似乎都正常。我有一個select來爲列表中選擇的內容設置當前字符,並且該字符有一個任務列表。一切看起來都可以找到,但是當我點擊我任務上的按鈕時,它正在使用原始父字符。任何方式來訪問點擊方法中的子範圍(我使用executeTask($索引))? – 2013-05-29 04:30:52