繁体   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