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();
    });
  }
  ..........
});