【发布时间】:2016-02-13 09:30:31
【问题描述】:
“在 Angular 中,通过对象的属性而不是原始对象本身来绑定视图中的引用被认为是最佳实践。”
摘自:阿里·勒纳。 “书。” (最新版本的第 66 页)。
我在其他任何地方都没有看到过这个参考,想知道它是否真的有什么不同?
【问题讨论】:
标签: javascript angularjs
“在 Angular 中,通过对象的属性而不是原始对象本身来绑定视图中的引用被认为是最佳实践。”
摘自:阿里·勒纳。 “书。” (最新版本的第 66 页)。
我在其他任何地方都没有看到过这个参考,想知道它是否真的有什么不同?
【问题讨论】:
标签: javascript angularjs
这是为了避免子范围问题。角度对象的范围有些奇怪。基本上,作用域上的对象有作用域继承,但原语没有。这是我遇到的一个问题。
<input ng-model="theModelOnMyScope" />
$scope.theModelOnMyScope = "This is the model";
看起来不错吧?但在某些情况下,它不会在您正在编辑的控制器中更新范围,因为 Angular 可能会为输入中的 ng-model 创建一个 childScope,具体取决于您的页面结构。现在,这就是这个特定问题的解决方案。
<input ng-model="anObject.theModelOnMyScope" />
$scope.anObject = {theModelOnMyScope:"This is the model};
这会奏效。原因是它会因为,如果视图上引用的属性是对象的属性,Angular 会尝试在当前范围内查找对象,如果找不到,它会升级一个级别并尝试在作用域的父对象上找到一个对象。因此,您可以对对象使用范围继承。出于某种原因,它不会对原语做到这一点。因此,为了避免子范围问题,最好将属性附加到对象。
【讨论】: