AngularJS$在控制器初始化期间观察奇怪的行为
AngularJS $watch strange behavior during controller initialization
我有一个代码片段:
var app = angular.module('Demo', []);
app.controller('DemoCtrl', function ($scope) {
function notify(newValue, oldValue) {
console.log('%s => %s', oldValue, newValue);
}
$scope.$watch('collection.length', notify);
$scope.$watch('my', notify);
$scope.collection = [];
$scope.my = 'hello';
});
$watch
最初启动。这个代码片段将输出:
0 => 0
hello => hello
这是正确的行为吗?当然,我可以检查平等的价值观,但这种行为的原因是什么?
附言:你可以在线试用这个样品:http://jsbin.com/otakaw/7/edit
根据文档:
只有当当前watchExpression
和上一次对watchExpression
的调用不是equal(,初始运行除外,请参阅下文)。
在向作用域注册观察程序之后,侦听器fn为异步调用(通过$evalAsync
)以初始化观察程序。在极少数情况下,这是不可取的,因为当watchExpression
的结果没有更改时会调用侦听器。要检测此在侦听器fn
中的场景中,您可以比较newVal
和oldVal
。如果这两个值相同(==),则侦听器由于初始化而调用
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 未激发路由的控制器属性上的观察者
- Ember:当子控制器同时观察到父控制器触发请求的相同属性时
- $scope$观察数组中的一个特定对象——Angular JS控制器
- AngularJS:使用$scope$以控制器作为语法进行观察
- Angularjs - 观察模态窗口从另一个控制器关闭
- 如何观察控制器/组件内阵列的变化
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- 从路由转换不会删除 Ember.js 中退出路由的控制器观察器
- 角度 js 控制器中的单元测试观察器
- 从不同的控制器在猫鼬更新时重复观察ng内部的变化
- 如何从成员控制器或组件观察把手模板中的多个状态
- AngularJS$在控制器初始化期间观察奇怪的行为
- 观察角度控制器之间的变化
- 从任何观察到的控制器更新模板
- Ember JS:父路由/控制器如何观察它的子路由/控制器的变化?
- 观察儿童控制器的属性
- 如何在Angular控制器中观察可变参数
- 从控制器观察工厂变量