私は角度指示文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')
経由で変更された場合、controller
のsetTimeout
に値が変更されたことが示されているにもかかわらず、変更が反映されません。どうしてこれなの?
コントローラと私のディレクティブの間に別のスコープを作成することはできません。この追加機能を追加するだけです。
この質問が表示された場合は、http://stackoverflow.com/questions/24521300/why-is-scope-digest-necessary-inside-document-keydownの回答が何が起こっているのかに多少答えます(私は他の回答が受け入れられていないので複製してください) – Isaac