簡體   English   中英

Angular radio ng-change僅在第一次工作

[英]Angular radio ng-change works only first time

我不明白為什么只有在第一次單擊時才調用角度ng-change函數。 在這個例子中

http://jsfiddle.net/ZPcSe/5/

每次更改當前收音機選擇時都會調用該函數,但是在我的代碼中出現了問題

http://jsfiddle.net/4jL3u8ko/1/

有人可以更改我的代碼以使其像第一個示例一樣工作,並解釋為什么它不起作用嗎?

好問題。

這不是答案,但可以將此解釋稱為答案以及可能發生的任何其他問題。 而且這種情況經常發生,因此了解這一點很重要。 @Victor給出的答案是可以的,@ Atias的評論也很有幫助。

說明-

簡單說明:ng-repeat形成子范圍。

詳細一點:

因此,您的應用程序具有3個作用域(或可能會增加,具體取決於$ scope.radioButtons中值的數量)。 我給它們命名-parentScope(主作用域),childScope1(ng-repeat的第一個元素的作用域)和childScope2(ng-repeat的第二個元素的作用域)。

父作用域變量:稱為Functions(數組),radioButtons(對象)和newValue(function)

ChildScope1變量:name(在開始時分配一個文字),val(在開始時分配一個對象)和value(它沒有值或未定義)

ChildScope2變量:name(在開始時分配一個文字),val(在開始時分配一個對象)和value(它沒有值或未定義)

第一次單擊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-model應該指向父范圍的變量。 因此,您可以使用$ parent或在具有屬性的父作用域(主作用域)中創建對象(例如-ParentVal = {ChildVal =“”};)。 並在ng-repeat-內的ng-model中編寫ng-model = ParentVal.ChildVal。

對不起,我的英語不好,請原諒我的拼寫錯誤。

謝謝

ng-model非常棘手。 您應該始終在模型中始終有一個點,否則在創建多個模型而您認為只有一個時會遇到這種問題。

作為快速解決方案,請使用$parent.value而不是ng-modelng-change value

作為一個好的解決方案,在范圍內有一個合適的模型對象,而不是直接在范圍內存儲值:

$scope.model = {};

ng-model="model.radiosValue"

作為更好的解決方案,請使用controllerAs模式並將該對象用作視圖模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM