美元的范围.$watch没有捕捉到指令修改的值



我的指令给焦点到我的跨度和分配布尔值即,focusToSpan为true每当我按shifttab,然而,这种变化并没有反映在我的控制器模板。我甚至检查了$scope。$watch on focusToSpan变量如下

指令

(function() {
    'use strict';
    angular.module("my.page").directive('getFocusToSpan', function() {
        return {
            link: function(scope, elem, attr, ctrl) {
                elem.bind("keydown keypress", function(event) {
                    if (event.which === 16) {
                        $('.iconclass').attr("tabIndex", -1).focus();
                        scope.focusToSpan = true;
                    }
                });
            }
        };
    });
})();
控制器

     $scope.$watch('focusToSpan', function(newValue) {
     if (angular.isDefined(newValue)) {
     alert(newValue);
     }
     });

没有被调用。我可以知道在指令中对控制器变量的更改将如何反映在控制器和模板中吗?谢谢,巴拉吉。

在angular上下文之外,你可以操作不更新的作用域/绑定。为了更新绑定,你需要运行摘要循环来更新所有作用域级别的绑定。

在你的例子中,你正在从自定义事件中更新角scope变量,所以你需要通过在scope

上执行$apply()方法来手动运行digest cycle。

elem.bind("keydown keypress", function(event) {
    if (event.which === 16) {
       $('.iconclass').attr("tabIndex", -1).focus();
       scope.focusToSpan = true;
       scope.$apply();
    }
});

最新更新