我们遇到的问题是,当我们收听事件时,我们发现它正在多次触发。我们只打开一次对话框,所以我们假设关闭相同的模态,此事件也应该只触发一次。应用程序中有多个模态,我们通过将它附加到$ rootScope来监听这个特定的模态,如下所示:
$rootScope.$on('ngDialog.closed', function (e, $dialog) {
console.log("CLOSED TEHE MODAL", $dialog);
console.log("EVENT", e);
if($rootScope.modalFinished && localStorage.getItem("tourComplete") !== "true"){
$rootScope.modalFinished = false;
console.log("THIS IS LOCAL STORE:", localStorage.getItem("tourComplete"));
$scope.CallMe();
}
});
我们通过$ rootScope监听的原因是通过这个"关闭"事件从一个控制器(模态)到另一个控制器(主屏幕)已经在模态控制器之前加载。
我们已经注意到了'ngDialog.closed'事件,多个事件被触发(每次关闭一个模态通常最多2到3次)。
这是我们打开ngDialog(在登录控制器中)的地方:
$state.go('app.dashboard')
if(AclService.can('edit')|| AclService.can('admin')){
$scope.$on('$stateChangeSuccess', function onStateSuccess(event, toState, toParams, fromState){
$rootScope.modalFinished = true;
CauseService.get().then(function(result){
var cause = result[0].attributes;
if(!cause.has_backlinked || !cause.has_verified_address){
// $rootScope.modalFinished = true;
ngDialog.open({
template: '../../app/views/dashboard/progress_modal.html',
showClose: false,
className: 'ngdialog-theme-default progressModal',
controller: 'ProgressModalController',
resolve:{
'Cause': ['CauseService', function(CauseService){
// console.log("CauseService in routes", CauseService.get());
return CauseService.get();
}]
}
});
}
});
});
}
非常感谢任何帮助。
非常感谢。
-M -
答案 0 :(得分:1)
好吧经过大量的试验和错误,我得出结论,由于将'ngDialog.close'事件附加到$ rootScope并且我们正在侦听的控制器已经在模态控制器加载之前已经加载,每个控制器将记录模态被关闭的事件。
为了解决这个问题,我将'ngDialog.close'事件附加到$ scope,如下所示:
tableRequest.getGlobalSecondaryIndexes().get(0).setProvisionedThroughput(new ProvisionedThroughput(10l, 10l));
现在,只有一个'ngDialog.close'事件的所需行为才会在仪表板控制器中触发。此解决方案还解决了此侦听器在其他$状态或控制器中的其他模态上被触发的问题。
希望这个答案可以帮助某人,并希望得到任何反馈!!!!
-M-
答案 1 :(得分:0)
//In nebular (angular 4+)
// Closed event identify by below code in nebular lib in Angular 4+
this.dialogService.open(UpdateUseItemComponent, {
hasBackdrop:true ,
closeOnEsc:true,
autoFocus:true,
context: {
data: event
}
}).onClose.subscribe(result => {
this.getStock();
});