ngDialog关闭事件多次触发(AngularJS)

时间:2016-05-24 00:19:49

标签: angularjs event-listener ng-dialog

我们遇到的问题是,当我们收听事件时,我们发现它正在多次触发。我们只打开一次对话框,所以我们假设关闭相同的模态,此事件也应该只触发一次。应用程序中有多个模态,我们通过将它附加到$ 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 -

2 个答案:

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