1

我在下面有以下代码片段。我遇到的问题是,只要 modal.isOpen 的值设置为 true,$watch 语句就不会触发。我试图避免使用 scope.$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();

                  }
              ..........
              });
4

1 回答 1

1

scope您应该密切注意赋予$watch函数的字符串中不应包含的属性。

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();
    });
  }
  ..........
});
于 2015-12-02T19:07:37.187 回答