我正在开发一个更复杂的项目(10000+ LoC),在开发过程中我经常遇到一个问题。
当我向范围添加一个简单变量时: $ scope.editing = true;
$sope.editing=false;
$scope.changeTextButtonClicked = function() {
$scope.editText;
}
<span ng-hide="editing">{{editText}}</span>
<input type="text" ng-model="editText" ng-show="editing">
<input type ="button" ng-click="changeTextButtonClicked()">
无法从控制器javascript代码访问$scope.editText
的当前值!
在某些情况下,我在访问$scope.editText
时获得旧值,就像DOM没有更新,但是直接在{{editText}}
网站上打印时,它可以工作并得到更新,但在控制器中我得到旧值。
碰巧我在网站上有{{editText}}
的一个值,在控制器中有$scope.editText
的另一个值(无效的 - 前一个)。
我通过将其添加到数据数组或嵌套在范围内的任何其他数组来解决这个问题:
$scope.data={}
$scope.data.editText = ...;
有人可以向我解释为什么它有时会与$scope.variable
一起使用,有时它不会,你需要添加$scope.**foobar**.variable
吗?
答案 0 :(得分:2)
我之前遇到同样的问题,然后我阅读了关于范围的本教程。
https://github.com/angular/angular.js/wiki/Understanding-Scopes
无论如何,主要概念是当你使用ng-model时总是使用点符号。 所以$ scope.user = {} 然后是$ scope.user.name。
希望它有所帮助。
答案 1 :(得分:0)
好的,我终于明白了。问题是$ watch只能绑定到一个对象并观察它,而不是像string,int这样的基本字段。布尔&amp;共
不好的是,当你有一个对象复杂的结构时,你不能只将它绑定到一个属性,而是绑定到导致性能问题的整个对象,如果它是一个多级对象。