2017-07-11 58 views
-1

我希望$ mdDialog的行爲與在$ locationchangestart中調用時的confirm()類似。 在恢復位置更改之前,$ mdDialog不會等待用戶輸入。

$rootScope.showConfirm = function (ev) { 
     // Appending dialog to document.body to cover sidenav in docs app 
     var confirm = $mdDialog.confirm() 
      .title('Tem certeza que deseja sair?') 
      .textContent('Informações não salvas serão perdidas"') 
      .targetEvent(ev) 
      .ok('Sim') 
      .cancel('Não'); 

     $mdDialog.show(confirm).then(function() { 
      $rootScope.status = true; 
     }, function() { 
      $rootScope.status = false; 
     }); 
    }; 


$rootScope.$on("$locationChangeStart", function (event, next, current) { 
     $rootScope.showConfirm(event); 

     if($rootScope.status == false){ 
      event.preventDefault(); 
     } 
    }); 

回答

0

嘗試修改鉤$locationChangeStart如下,看看它的工作原理:

$rootScope.$on("$locationChangeStart", function (event, next, current) { 
     if(!$rootScope.showConfirm(event)) { 
      event.preventDefault(); 
     } 
}); 

修改showConfirm基於用戶響應返回真/假如下:

$mdDialog.show(confirm).then(function() { 
    return true; 
}, function() { 
    return false; 
}); 

有是一個類似的問題回答here。希望也有幫助。

+0

不起作用。 $ mdDialog永遠不會停止發生位置更改。 – Vinicius

+0

只是一個建議:你可以打電話給$ rootScope.showConfirm,在你想改變路線的地方點擊按鈕/鏈接來顯示Modal。在$ rootScope.showConfirm裏面單擊確定執行$ location.path()的東西。這樣你就不必擔心這個問題。 –