0

私は角度指示文ngx-notificationsを持っていますが、コントローラMenuBarControllerの中にあります。

ビュー

<div class="row" ng-controller="MenuBarController"> 
... 
    <span ng-click="ShowNotifications()">click me</span> 
    <div ng-show="NotificationsVisible" ngx-notifications="NotificationsVisible"> 

コントローラ

$scope.NotificationsVisible = false; 

function ShowNotifications(){ 
    $scope.NotificationsVisible = !$scope.NotificationsVisible; 
} 


setInterval(function(){ 
    console.log($scope.NotificationsVisible); 
},1000); 

指令

angular.module('app').directive('ngxNotifications', NotificationsDirective); 

NotificationsDirective.$inject = ['$document']; 
function NotificationsDirective($document) { 

    return { 
    restrict: "A", 
    scope: false, 
    link: function ($scope, $elem, $attr) { 
     var key = $attr.ngxNotifications; 

     $document.on("click",function ($e) { 
     if(!$elem[0].contains($e.target)){ 
      console.log($scope,key); // logs correct scope and key 
      //neither of the two following lines are reflected in the view 
      $scope[key] = false; 
      $scope.NotificationsVisible = false; 

     } 
     }); 

    } 
    } 
} 

span[ng-click]は通知ボックスの表示を切り替えますが、何かの理由でdirective$document.on('click')経由で変更された場合、controllersetTimeoutに値が変更されたことが示されているにもかかわらず、変更が反映されません。どうしてこれなの?

コントローラと私のディレクティブの間に別のスコープを作成することはできません。この追加機能を追加するだけです。

+0

この質問が表示された場合は、http://stackoverflow.com/questions/24521300/why-is-scope-digest-necessary-inside-document-keydownの回答が何が起こっているのかに多少答えます(私は他の回答が受け入れられていないので複製してください) – Isaac

答えて

0

私が疑われるとして、$document::on方法は、角ダイジェストの一部ではないいくつかの理由で、$scope.$applyが働い加えるが、これは本当に意味がないため(私はモデルを変更するには、角度コードを残したことはありません):

$document.bind("click",function ($e) { 
    if($scope[key] && !$elem[0].contains($e.target)){ 
    $scope.$apply(function() { 
     $scope[key] = false; 
    }); 
    } 
}); 
+0

$ document.bindのため、元の解決策が動作しないと思います。それは角度ダイジェストループの一部ではありません。次に、$ scope.apply()を使用して強制します。 – Mfusiki

+1

いや私は転記した後にそれを読んでいます(何が起こっていたのか分かったらすぐにGoogleをやった)。これは残念ですが、私はネイティブ角度コードがダイジェストループで動作することを期待しています – Isaac

関連する問題