$ modal没有在$ stateChangeStart上加载,而是$ stateChangeStart被无限触发

时间:2015-04-10 12:05:53

标签: angularjs modal-dialog angular-ui-router infinite-loop

当用户尝试将其状态更改为 app 时,我尝试抛出一个登录模式。

当状态更改为应用时,将调用服务loginService。代码进入服务并从stateChange进入无限循环。(运行'和'服务'中的警报'无限运行)在手动停止警报后,模态也被无限地抛出。

状态变化一次又一次地发生是我的感受。

提前感谢任何帮助过的人。 我对angularjs很新,我一直在尝试这些东西。 链接到插件是:http://plnkr.co/edit/7b16Df1d8ubDBuu2qXg3

 app.run(function($state,$rootScope,loginService){
 $rootScope.$on('$stateChangeStart',function(event,toState,toParams){
 if(toState.name==='app'){
  event.preventDefault();
  alert('in run');
  if(loginService.openModal()){
    $state.go(toState.name);
    return;
  }
  else
  {
    $state.go('welcome');
  }


}
});
});
 app.factory('loginService',['$modal',function($modal){
 return{
      openModal:function(){
         alert("in service");
         var modalLoginInstance=$modal.open({
         // template:alert('in modal instance'),
         templateUrl:'loginModalTemplate.html',
         controller:'modalInstanceCTRL'
    });
   return modalLoginInstance.result.then(function(){alert('in success');return true},function(){alert('in failure');return false});
}
};
}]);

1 个答案:

答案 0 :(得分:0)

糟糕!我能够找到错误,我在modalinstance结束时添加了额外的返回

 return modalLoginInstance.result.then(function(){alert('in success');return true},function(){alert('in failure');return false});}

此处的第一次返回需要删除。

正确的是

modalLoginInstance.result.then(function(){alert('in success');return true},function(){alert('in failure');return false});}