我不明白爲什麼角度ng-change
函數僅在第一次點擊時被調用。在這個例子中角度廣播ng-change只有第一次工作
函數被調用每一次當我改變當前的無線選擇,但在我的代碼的東西是錯誤
http://jsfiddle.net/4jL3u8ko/1/
有人可以改變我的代碼,就像第一個例子上班,並解釋它爲什麼不起作用?
我不明白爲什麼角度ng-change
函數僅在第一次點擊時被調用。在這個例子中角度廣播ng-change只有第一次工作
函數被調用每一次當我改變當前的無線選擇,但在我的代碼的東西是錯誤
http://jsfiddle.net/4jL3u8ko/1/
有人可以改變我的代碼,就像第一個例子上班,並解釋它爲什麼不起作用?
偉大的問題。
這不是一個答案,但可以將這個解釋稱爲答案和任何可能發生的進一步問題。這經常發生,所以它很重要。 @Victor給出的答案沒問題,@Atias的評論也很有幫助。
說明 -
簡單解釋:ng-repeat形成子範圍。
小細節:
所以,你的應用程序有3個領域(或可能取決於值的$ scope.radioButtons數量的增加)。讓我給它們命名 - parentScope(主範圍),childScope1(ng-repeat的第一個元素的範圍)和childScope2(ng-repeat的第二個元素的範圍)。
父範圍變量:calledFunctions(陣列),單選按鈕(對象)和NEWVALUE(功能)
ChildScope1變量:名稱(在開始時分配一個文字),纈氨酸(分配對象開始)和值(它沒有價值,或undefined)
ChildScope2變量:名稱(在開始分配的文字),VAL(在啓動分配一個對象)和值(它沒有價值,或undefined)
會發生什麼當你點擊childScope1的單選按鈕時(第一次):
ChildScope1.value = ChildScope1.name或ChildScope1.value =「Radio1」; ng-change指令檢查這個範圍的模型是否被改變了?是的,因爲它是未定義的,現在它有一個文字(「Radio1」)!所以調用ChildScope1.newValue(),顯然不存在。因此,現在查找父母調用parentScope.newValue()。這是現在,所以執行它。
請記住,ChildScope1.value =「Radio1」;
點擊其他單選按鈕...... 現在我們點擊第二次ChildScope1的單選按鈕。點擊後 - ChildScope1.value = ChildScope1.name或ChildScope1.value =「Radio1」; ng-change指令檢查這個範圍的模型是否已經改變?沒有!!因爲它仍然包含與以前相同的字面值,所以甚至不要查找ChildScope1.newValue()或ParentScope.newValue()函數。
現在ChildScope2也會發生同樣的情況。
希望這解釋了爲什麼你的小提琴像一次性裝訂,或者@Victor或@Atias是如何正確的。
簡單的解決方案是 - ChildScope1或ChildScope2或任何其他子作用域的ng模型應指向父作用域的變量。因此,您可以使用$ parent或使用屬性(例如ParentVal = {ChildVal =「」};)在父範圍(主範圍)中創建一個對象。並且在ng-model中ng-repeat-write ng-model = ParentVal.ChildVal。
對不起,我可憐的英語,請原諒我的拼寫錯誤,如果有的話。
謝謝
ng-model
很棘手。您應該始終在模型中始終保留一個點,否則在創建多個模型時您會遇到這種問題,並且您認爲您只有一個模型。
作爲快速解決方案,請在ng-model
和ng-change
之間使用$parent.value
而不是value
。
作爲一個良好的修正,具備在範圍的適當模型對象,而不是直接在範圍存儲值:
$scope.model = {};
ng-model="model.radiosValue"
作爲一個更好的修復程序,使用controllerAs
圖案,並使用該對象作爲查看模型。
在我的例子中$ scope.value只是所選無線電名稱的名稱,就像在第一個jsfiddle – kris14an
這兩個js小提琴工作正常。 –
http://stackoverflow.com/questions/13714884/difficulty-with-ng-model-ng-repeat-and-inputs這就是原因 – Atais
Abhilash P A - 第二個jsfiddle是不正確的!無線電方法第一次調用 – kris14an