[JQUERY] 어떻게 각도를 사용하여 브라우저의 뒤로 버튼 클릭 이벤트를 감지?
JQUERY어떻게 각도를 사용하여 브라우저의 뒤로 버튼 클릭 이벤트를 감지?
해결법
-
1.여기서 앵귤러 갖는 용액이다.
여기서 앵귤러 갖는 용액이다.
myApp.run(function($rootScope, $route, $location){ //Bind the `$locationChangeSuccess` event on the rootScope, so that we dont need to //bind in induvidual controllers. $rootScope.$on('$locationChangeSuccess', function() { $rootScope.actualLocation = $location.path(); }); $rootScope.$watch(function () {return $location.path()}, function (newLocation, oldLocation) { if($rootScope.actualLocation === newLocation) { alert('Why did you use history back?'); } }); });
나는이 킥 스타트 실행 블록을 사용하고 있습니다. 먼저 나는 새 값으로 I 업데이트 actualLocation을 발생하면 그때 $ locationChangeSuccess을 듣고, $ rootScope.actualLocation의 실제 위치를 저장합니다.
$ locationChangeSuccess 사용자가 역사의 뒷면을 사용하고있다 즉, 해고되지 않았기 때문에 위치 경로와 새 위치가 previousLocation 동일한 경우 변경 내용을 $ rootScope I 시계입니다.
-
2.당신이 더 정확한 솔루션을 원하는 경우 (뒷면을 감지하고 앞으로) 저는 버트 랜드에 의해 전달 솔루션을 확장 :
당신이 더 정확한 솔루션을 원하는 경우 (뒷면을 감지하고 앞으로) 저는 버트 랜드에 의해 전달 솔루션을 확장 :
$rootScope.$on('$locationChangeSuccess', function() { $rootScope.actualLocation = $location.path(); }); $rootScope.$watch(function () {return $location.path()}, function (newLocation, oldLocation) { //true only for onPopState if($rootScope.actualLocation === newLocation) { var back, historyState = $window.history.state; back = !!(historyState && historyState.position <= $rootScope.stackPosition); if (back) { //back button $rootScope.stackPosition--; } else { //forward button $rootScope.stackPosition++; } } else { //normal-way change of page (via link click) if ($route.current) { $window.history.replaceState({ position: $rootScope.stackPosition }); $rootScope.stackPosition++; } } });
-
3.를 들어, UI 라우팅 나는 코드 아래를 사용하고 있습니다.
를 들어, UI 라우팅 나는 코드 아래를 사용하고 있습니다.
내부 App.run (), 사용
$rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) { if (toState.name === $rootScope.previousState ) { // u can any 1 or all of below 3 statements event.preventDefault(); // to Disable the event $state.go('someDefaultState'); //As some popular banking sites are using alert("Back button Clicked"); } else $rootScope.previousState= fromState.name; });
당신은 또한 당신이 원하는 '경우 다음과 같은'$ stateChangeSuccess '이벤트의'previousState '값을 얻을 수 있습니다.
$rootScope.$on("$stateChangeSuccess", function (event, toState, toParams, fromState, fromParams) { $rootScope.previousStatus = fromState.name; });
-
4.나는이 오래된 질문 알아요. 어쨌든 :)
나는이 오래된 질문 알아요. 어쨌든 :)
BEMA의 대답은 멋지다. 당신이 (해시 같아요없이) '정상'URL을 작동하게하려는 경우, 당신은 대신에) ($ location.path에 의해 반환 된 하나의 절대 경로를 비교할 수 :
myApp.run(function($rootScope, $route, $location){ //Bind the `$locationChangeSuccess` event on the rootScope, so that we dont need to //bind in induvidual controllers. $rootScope.$on('$locationChangeSuccess', function() { $rootScope.actualLocation = $location.absUrl(); }); $rootScope.$watch(function () {return $location.absUrl()}, function (newLocation, oldLocation) { if($rootScope.actualLocation === newLocation) { alert('Why did you use history back?'); } }); });
-
5.자바 스크립트는 기본 이력 개체가 있습니다.
자바 스크립트는 기본 이력 개체가 있습니다.
window.history
더 많은 정보를위한 MDN을 확인; https://developer.mozilla.org/en-US/docs/DOM/window.history?redirectlocale=en-US&redirectslug=window.history
확실하지가 멀티 브라우저 지원 상점에 얼마나 좋아요.
최신 정보
난 단지 도마뱀 붙이 형 브라우저입니다 위라고 한 것을 보인다.
다른 브라우저의 사용 history.js 시도; https://github.com/browserstate/history.js
-
6.그래서, 타이프 라이터로 @Bema하여 답을 전사 한,이는 모습입니다 :
그래서, 타이프 라이터로 @Bema하여 답을 전사 한,이는 모습입니다 :
namespace MyAwesomeApp { // ReSharper disable once Class function detectBackButton( $rootScope: ng.IRootScopeService, $location: ng.ILocationService ) { let actualLocation: string = ''; $rootScope.$on('$locationChangeSuccess', () => { actualLocation = $location.path(); }); $rootScope.$watch(() => $location.path(), (newLocation: string, oldLocation: string) => { if (actualLocation === newLocation) { //$rootScope.$broadcast('onBackButtonPressed', null); } }); } detectBackButton.$inject = [ '$rootScope', '$location' ]; angular .module('app') .run(detectBackButton); }
우리는 $의 rootScope 서비스의 오프 속성을 만들 필요가 없습니다, 우리는 단지 '위치에 대한 변경'우리 '의 위치 변화에 성공'코드 지역 actualLocation 변수를 통해 모두 닫기를 할 수 있습니다. 여기에서, 당신은 단지 원래의 코드와 같이 원하는대로 할 수 있습니다. 나의 부분을 위해, 나는 개별 컨트롤러가 무엇이든 그들이해야 할 수 있도록 이벤트를 브로드 캐스팅하는 생각 하는데요,하지만 당신이 있었다면 당신은 글로벌 작업을 포함 할 수있다.
덕분에 좋은 답변을, 나는이 거기에서 다른 타이프 라이터 사용자에게 도움이되기를 바랍니다.
-
7.이 문제에 대한 나의 해결책이다
이 문제에 대한 나의 해결책이다
app.run(function($rootScope, $location) { $rootScope.$on('$locationChangeSuccess', function() { if($rootScope.previousLocation == $location.path()) { console.log("Back Button Pressed"); } $rootScope.previousLocation = $rootScope.actualLocation; $rootScope.actualLocation = $location.path(); }); });
-
8.다시 버튼을 누르면, 각 화재 단지 $ routeChangeStart 이벤트는, $ locationChangeStart하지졌습니다.
다시 버튼을 누르면, 각 화재 단지 $ routeChangeStart 이벤트는, $ locationChangeStart하지졌습니다.
from https://stackoverflow.com/questions/15813850/how-to-detect-browser-back-button-click-event-using-angular by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 자바 스크립트의 시작 부분에 세미콜론을 시작하는 목적은 무엇입니까? [복제] (0) | 2020.10.28 |
---|---|
[JQUERY] jQuery를 요청 본문에 유효한 JSON을 게시 (0) | 2020.10.28 |
[JQUERY] 어떻게 문자열 '9:61'에 '9.61'를 변환하는 자바 스크립트로 교체해야합니까? (0) | 2020.10.28 |
[JQUERY] 옵션이 jQuery를 함께 선택한 경우 기본을 선택하지 않을 경우, 확인 (0) | 2020.10.28 |
[JQUERY] 선택기 하나 여러 이벤트 핸들러 JQuery와 CSTE 연구진 () 메소드 (0) | 2020.10.28 |