变量更改没有通知到' $scope.$watch '
variable change not notified to `$scope.$watch`
我正在处理一个JQRangeSlider通过一个角指令+控制器。
在我的控制器中,我为范围变量分配新值,但没有通知控制器范围(我在我的指令中使用隔离的范围'='
),即使它是正确更新的。
// JQRangeSlider event handler
var valuesChanged = function(e, data) {
if (data.values.min && data.values.max) {
console.log('values changed', data.values); // this is always printed
$scope.minselectedtime = data.values.min; // not triggering $scope.$watch
$scope.maxselectedtime = data.values.max;
$scope.$broadcast('minchanged', $scope.minselectedtime); // instantly triggering $scope.$on('minchanged',...)
console.log('scope', $scope);
}
};
$scope.$watch('minselectedtime', function(newValue, oldValue) {
if (newValue === oldValue) {
return;
}
console.log('minselectedtime -->', newValue);
}, true);
$scope.$on('minchanged', function(event, min) {
console.log('minchanged ==>', min);
});
$scope.$watch('minselectedtime', ...)
仅在下一次$scope
修改时触发(其中$scope.minselectedtime
甚至没有被修改):
$scope.toggleTimeScale = function(refinementString) {
console.log('scale set to', refinementString);
$scope.timescale = refinementString; // year, month, day...
}
为什么没有立即通知$scope.$watch
变量的变化?
被隔离的代码的$scope.minselectedtime
值被改变了,但是父作用域直到$scope.toggleTimeScale
被触发才看到它的值被改变。
您使用$scope.$apply()的方法是正确的。原因是JQRangeSlider的更新发生在angularjs的知识之外。如果您阅读了关于$apply方法(http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply)的文档,就会发现它用于您需要的情况。
相关文章:
- 强制 $scope.$watch 只开火一次
- 为什么AngularJS$scope.watch()在我告诉它监视数组时会停止工作
- $location.search() - 如何在 $scope.$watch 函数中使用作用域中的参数
- 仅在focusout字段之后调用$scope.watch函数
- $scope.$watch(var,function) undefined 不是函数
- 不断在 $scope.$watch 函数中收到“类型错误:无法读取 null 的属性'值'”
- 对 angular.extend 的调用不会导致 $scope.$watch proc
- $scope.$watch 使用棱角材料
- AngularJS:$scope.$watch 不会更新从自定义指令$resource获取的值
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 如何在 Angular 1.5 组件中等待绑定(没有 $scope.$watch)
- Scope.watch 在指令中调用在开头 angularjs
- Angular 不会保存 $scope.$watch 顺序
- 如何控制$scope.$watch迭代
- 当我将$scope分配给另一个变量并更改新变量上的监视值时,不会触发角度 $scope.$watch
- 具有许多控件的窗体,它们之间具有交互.比$scope.$watch更清洁的方法
- 为什么当我尝试在 scope.$watch 中运行时,getElementsByTagName 为空
- 如何使用$scope.$watch和ng-repeat
- $scope.watch() 在链接函数中
- AngularJS $scope.$watch Jasmine 测试中未定义的回调函数参数