javascript - Angular ngModel 绑定(bind)在 $scope 的一级方法上

标签 javascript angularjs

这不完全是一些代码的问题,但更多的是我的理解。因此,如果这在这里不合适,请原谅我..

我正在玩一个分配了 ngModel 的简单复选框:

<input type="checkbox" ng-model="someFlag"/>

我希望这会将复选框的 bool 值绑定(bind)到 $scope.someFlag(如果 Controller 和其他所有配置正确)。 是的,它确实有效。但有时我发现这是行不通的。案例:当我尝试在 someFlag 更改时执行某些操作(例如在 $watch 中)时,该值并未真正绑定(bind)。

但是后来我遇到了一位同事曾经提到的事情:

Use a wrapper object

现在这样做没有任何问题:

<input type="checkbox" ng-model="wrapperObject.someFlag"/>

观察 $scope.wrapperObject.someFlag 按预期工作。

现在的问题是:为什么??

最佳答案

当执行 ngModel 指令时,它会读取属性的 ng-model 值(在本例中为 "someFlag")并将其保存在它是局部函数作用域(不要与 Angulars $scope 混淆)。但是由于 javascript 中的 boolean 是基本类型,您不能通过引用传递它,只能通过值传递。这意味着只有 $scope.someFlag 的值(truefalse)被复制到 ngModel,并且不是从 ngModel 访问和修改 $scope.someFlag 的方式。

当你使用 wrapper 对象时,它是通过引用传递的,这意味着,它在 $scope.wrapperObjectngModel 的局部函数范围内是一样的,因为它在幕后指向相同的内存地址。

我不确定这是否足够解释,但是当使用 Angular 原始值时,您必须记住按引用传递和按值传递之间的区别,以及当原始值发生变化时,应用程序的其他部分可能不知道这一点.

关于javascript - Angular ngModel 绑定(bind)在 $scope 的一级方法上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24083223/

相关文章:

javascript - 搜索嵌套对象并返回整个路径

javascript - 我的 AngularJS 代码没有被执行?

AngularJS typeahead 选择模糊

javascript - 具有重置功能的 Angular Directive(指令)

javascript - 限制可选择的 DOM 复选框

javascript - 在 MVC Ajax..BeginForm 部分回发后运行 Javascript

javascript - 如何隐藏然后恢复到初始状态(= 不总是 "block")?

AngularJS 开关

javascript - Angular ng-显示如何使其可见

javascript - 有关 javascript 的一般问题(REST 与 SOAP)