AngularJS $watch的行为不符合预期
AngularJS $watch not behaving as expected
我有一个指令,当一个服务变量被改变时,它应该调用一个函数。
指令内部的代码如下:
$rootScope.$watch('movesService.selectedMove', function() {
console.log(movesService.selectedMove);
if (movesService.selectedMove === "Punch") {
vm.pushToFightLog('Select Target');
}
if (movesService.selectedMove === "Fury") {
//Action
}
if (movesService.selectedMove === "Fortify") {
//Action
}
if (movesService.selectedMove === "Parry") {
//Action
}
}, true);
服务: angular
.module('outerZone')
.service('movesService', movesService);
function movesService() {
var vm = this;
vm.selectedMove = "Punch";
}
问题是,当$watch第一次被调用时,它能够读取变量并将其记录到控制台,但即使在此之后更改了变量,它也不会触发该函数。
我相当有信心,$rootScope被正确注入,但这里的代码只是为了再次检查。
angular
.module('outerZone')
.directive('fightDisplay', fightDisplay);
fightDisplay.$inject = ["alliesService", "enemiesService", "fightQueueService", "$timeout", "movesService", "$rootScope"];
function fightDisplay(alliesService, enemiesService, fightQueueService, $timeout, movesService, $rootScope) {
使用您提供的plunker,我对watch功能做了如下修改
$scope.$watch('test', function() { //scope variable should be watched like this
$scope.watchCount++
});//removed true for strict checking (===) as $scope.test is initalised as String 'Hello'
如果我们想要严格检查,那么改变$scope.test =0
和
$scope.$watch('test', function() {
$scope.watchCount++
},true);
这是工作柱塞。要了解更多关于$watch()的工作原理,请查看这个博客
相关文章:
- “;Stub对象”;对象不符合检查点's条件
- 使用 jQuery 检查文本可见性 .包含代码的行为不符合预期
- Javascript setSelectionRange 在单元测试中的行为不符合预期
- DOM元素的行为不符合预期
- Javascript动画的行为不符合预期
- 谷歌图表与表给予“;[对象对象]不符合控制规范”;错误
- Chrome 中的 Array.prototype.splice - 不符合规范
- 获取集合中不符合条件的所有文档
- 更改属性时不触发$watch的对象
- 标头不符合 100% 宽度
- 粘性导航栏在 jsfiddle 上工作,但在本地主机上不符合预期
- 页面视图不符合预期,HTML 未显示,页面为空白
- Javascript clearInterval 和 setInterval() 的行为不符合预期
- jQuery Clone() 在页面中的行为不符合 asp.net
- JavaScript 如果文本输入不符合参数,则阻止文本输入
- event.stopPropagation();行为不符合预期
- 为什么正则表达式模式不符合 javascript 数据类型的条件
- 表格下拉选择不符合Div
- 从没有'不符合Regex规则
- AngularJS $watch的行为不符合预期