1

我的代碼如下。我遇到的問題是,只要modal.isOpen的值設置爲true,$ watch語句就不會觸發。我試圖避免使用範圍。$ apply。我在做什麼錯在這裏...

內部鏈接功能在角度指令:

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

        } 
       .......... 
       }); 
+0

嘗試'$ scope.apply()' –

+0

它的工作原理,但我試圖避免使用scope.apply。有沒有使用scope.apply的另一種方法? – user1142130

+0

如果你想更新模型,你應該使用$ apply – sani

回答

1

你應該保持手錶上不應該給$watch函數的字符串中scope財產。

scope.$watch('modal.isOpen', function(newValue, oldValue) { 

而自定義事件修改scope不會更新綁定。你需要使用$timeout/$apply()來更新綁定(如果任何代碼運行在角度上下文的外部,角度不會運行摘要循環來更新綁定)。

$document.bind('keydown', function(e) { 

    if (e.keyCode >= 48 && e.keyCode <= 90) { 
    $timeout(function() { 
     scope.modal.isOpen = true; 
     elem.find('input')[0].focus(); 
    }); 
    } 
    .......... 
}); 
+0

我刪除了'範圍',但它仍然不起作用。 – user1142130

+0

@ user1142130試試更新的解決方案.. –

+0

$ timeout啓動$ apply? – user1142130