scope.$watch 不触发变量变化
scope.$watch not firing on variable change
我有下面的代码片段。我遇到的问题是,只要 modal.isOpen 的值设置为 true,$watch 语句就不会触发。我试图避免使用 scope.$apply。我在这里做错了什么...
Angular 指令中的 Link 函数内部:
link: function (scope, elem, attrs) {
scope.$watch('modal.isOpen', function(newValue, oldValue) {
if (newValue)
console.log("This does not trigger...");
}, true);
$document.bind('keydown', function (e) {
if(e.keyCode >= 48 && e.keyCode <= 90) {
scope.modal.isOpen = true;
elem.find('input')[0].focus();
}
..........
});
您应该注意 属性,它不应该在给定 $watch
函数的字符串中包含 scope
。
scope.$watch('modal.isOpen', function(newValue, oldValue) {
并且从自定义事件修改 scope
时,不会更新绑定。您需要使用 $timeout
/$apply()
启动摘要循环来更新绑定。(如果任何代码 运行 在 angular 上下文之外,angular 不会 运行 更新绑定的摘要周期)。
$document.bind('keydown', function(e) {
if (e.keyCode >= 48 && e.keyCode <= 90) {
$timeout(function() {
scope.modal.isOpen = true;
elem.find('input')[0].focus();
});
}
..........
});
我有下面的代码片段。我遇到的问题是,只要 modal.isOpen 的值设置为 true,$watch 语句就不会触发。我试图避免使用 scope.$apply。我在这里做错了什么...
Angular 指令中的 Link 函数内部:
link: function (scope, elem, attrs) {
scope.$watch('modal.isOpen', function(newValue, oldValue) {
if (newValue)
console.log("This does not trigger...");
}, true);
$document.bind('keydown', function (e) {
if(e.keyCode >= 48 && e.keyCode <= 90) {
scope.modal.isOpen = true;
elem.find('input')[0].focus();
}
..........
});
您应该注意 属性,它不应该在给定 $watch
函数的字符串中包含 scope
。
scope.$watch('modal.isOpen', function(newValue, oldValue) {
并且从自定义事件修改 scope
时,不会更新绑定。您需要使用 $timeout
/$apply()
启动摘要循环来更新绑定。(如果任何代码 运行 在 angular 上下文之外,angular 不会 运行 更新绑定的摘要周期)。
$document.bind('keydown', function(e) {
if (e.keyCode >= 48 && e.keyCode <= 90) {
$timeout(function() {
scope.modal.isOpen = true;
elem.find('input')[0].focus();
});
}
..........
});