我正在通过角度指令 + 控制器处理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