我在下面有以下代码段。我遇到的问题是,只要modal.isOpen的值设置为true,$ watch语句就不会触发。我试图避免使用范围。$ apply。我在这做错了什么......
Angular指令中的内部链接功能:
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();
}
..........
});
答案 0 :(得分:1)
你应该密切注意在scope
函数的字符串中不应该有$watch
的属性。
scope.$watch('modal.isOpen', function(newValue, oldValue) {
从自定义事件修改scope
时,不会更新绑定。您需要使用$timeout
/ $apply()
来启动摘要周期以更新绑定。(如果任何代码运行角度上下文,则angular不会运行摘要周期来更新绑定)。
$document.bind('keydown', function(e) {
if (e.keyCode >= 48 && e.keyCode <= 90) {
$timeout(function() {
scope.modal.isOpen = true;
elem.find('input')[0].focus();
});
}
..........
});