2016-09-16 205 views
0

我一直在尋找爲Angularjs後退按鈕事件實例加載,但沒有一個例子已經工作了我。無論何時按下瀏覽器後退按鈕,我的代碼都不會收到事件。現在我一直在撓頭。Angularjs歷史後退按鈕不工作

所有我想要做的就是得到一個警告,詢問用戶確認他們要回去和適度寬鬆的所有數據。

下面是我一直在努力的代碼。它是來自其他例子的副本,但具有完整的代碼。

我已經嘗試使用$範圍,而不是$ rootscope添加$上的控制器,我曾嘗試在routechangestart手錶,似乎沒有趕上後退按鈕。

是否有人有一個完整的小例子,或者告訴我什麼,我做錯了什麼?

var BackButtonTest = angular.module('BackButtonTest', ['ngRoute']); 

BackButtonTest.controller('backbuttonCtrl', function($scope, $location, $route) { 
}); 

BackButtonTest.run(function($rootScope, $route, $location){ 
    //Bind the $locationChangeSuccess event on the //rootScope, so that we don't need to 
    //bind in induvidual controllers. 

    $rootScope.$on('$locationChangeSuccess', function() { 
     $rootScope.actualLocation = $location.path(); 
    }); 

    $rootScope.$watch(function() { 
     return $location.path() 
    }, function (newLocation) { 
     if($rootScope.actualLocation === newLocation) { 
     // run a function or perform a reload 
     } 
    }); 
}); 

我用的HTML代碼如下:

<!doctype html> 
<html lang="en" ng-app="BackButtonTest"> 
<head> 
    <meta charset="utf-8"> 
    <title>BackButtonTest App</title> 
</head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js</script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.min.js"></script> 
<script src="app.js"></script> 
<body ng-controller="backbuttonCtrl as bbc"> 
    <div class="container-fluid"> 
    <div class="row"> 
     <div class="col-md-8 col-md-push-2"> 
     Some random text 
     </div> 
    </div> 
    </div> 
</body> 
</html> 
+0

本文將幫助:http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs – Nix

回答

0

我推薦使用$locationChangeStart,因爲這是你可以「阻止」的發生變化。

邏輯基本上是:

  1. 截取位置改變請求。
  2. 確定是否需要出示模式
  3. 如果是這樣preventDefault上的位置變化(這將停止從發生的變化),其中用戶想去
  4. 顯示你的語氣
  5. 保存
  6. 如果他們點擊'取消'忘記#4
  7. 如果他們點擊確定,允許#4發生。

此鏈接走過的如何做到這一點的細節:http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs

+0

喜尼克斯,我確實嘗試了$ locationChangeStart,正如你所建議的那樣,但沒有運氣。也嘗試了dwahlin的例子,但仍然沒有運氣。有人有jsfiddle或plnkr例子嗎? –

+0

什麼不起作用? – Nix

+0

好的,所以我在Chrome中打開了開發者控制檯,我想要的是捕獲單擊後退按鈕時觸發的事件。這是什麼不工作。它只是返回到前一頁,而不會觸及任何$ locationChageStart,$ locationChageSuccess,$ routeChangeStart,$ watch(用於位置路徑更改)。 此外,我已經在控制器和運行中添加了提到的事件。點擊瀏覽器後退按鈕時,兩個地方都不會捕獲事件。 –

相關問題