范围。$表示不会对变量进行触发

时间:2015-12-02 19:06:35

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-watch

我在下面有以下代码段。我遇到的问题是,只要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();

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

1 个答案:

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