복붙노트

[JQUERY] 어떻게 각도를 사용하여 브라우저의 뒤로 버튼 클릭 이벤트를 감지?

JQUERY

어떻게 각도를 사용하여 브라우저의 뒤로 버튼 클릭 이벤트를 감지?

해결법


  1. 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. 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. 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. 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. 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. 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. 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. 8.다시 버튼을 누르면, 각 화재 단지 $ routeChangeStart 이벤트는, $ locationChangeStart하지졌습니다.

    다시 버튼을 누르면, 각 화재 단지 $ routeChangeStart 이벤트는, $ locationChangeStart하지졌습니다.

  9. from https://stackoverflow.com/questions/15813850/how-to-detect-browser-back-button-click-event-using-angular by cc-by-sa and MIT license