$ scope。$ watch没有捕获指令修改的值

时间:2015-08-16 18:46:42

标签: javascript angularjs angularjs-directive angularjs-watch angular-digest

我的指令专注于我的范围并指定布尔值,即每当我按 shifttab 时,focusToSpan为true,但是,此更改未反映在我的中控制器模板。我甚至用$ 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);
     }
     });

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

1 个答案:

答案 0 :(得分:1)

在角度上下文之外,您可以操作未更新的范围/绑定。为了使绑定更新,您需要运行摘要周期来更新所有范围级别绑定。

在您的情况下,您要从自定义事件更新角度scope变量,因此您需要通过在范围上执行$apply()方法手动运行摘要周期

<强>代码

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