programing

AngularJS는 이력 상태를 푸시하지 않고 리다이렉트한다.

yoursource 2023. 3. 18. 14:21
반응형

AngularJS는 이력 상태를 푸시하지 않고 리다이렉트한다.

Angular Angular를앱 "JS").when('/:slug', {...)이전 버전의 앱에서 레거시 URL 형식을 지원하는 데 필요합니다.된 오브젝트를수 없는 catch all을 .찾을 수 없는 경우 를 사용하여404 페이지로 리다이렉트 합니다.$location.path 됩니다.이것은 사용자를 404 페이지로 이동시키는 데 도움이 되지만, 사용자가 브라우저로 되돌아가면 처음에 강제로 404 페이지로 이동시켰던 페이지로 돌아가 결국 사이클을 벗어날 수 없게 됩니다.

질문입니다만 1) 이 상황에 대처하기 위한 더 나은 패턴이 있는지, 아니면 2) 브라우저에서 이력 푸시 상태를 강제하지 않는 사용자를 재루팅할 방법이 있는지 여부입니다.

"교체 방법"에 있는 기록 상태에 추가하지 않고 URL을 변경할 수 있습니다.이는 사실상 HTML5의 history.replaceState()를 호출하는 것과 같습니다.

$location.path('/someNewPath').replace();

url을 변경하지 않고 뷰를 변경할 수 있는 것은 아직 발견되지 않았습니다.뷰를 변경하는 유일한 방법은 위치 경로를 변경하는 것입니다.

은, 「」의 입니다.$route하는 $locationChangeSuccess을 사용법 및 .$routeChangeSuccess 그 이벤트.$routeChangeSuccess 대상입니다.ng-view새로운 루트가 준비되면 템플릿과 스코프를 교환하는 방법을 알 수 있습니다.

하면, 코드로 「」의을 에뮬레이트 하는 이 기능하는 경우가 .$route현재 루트를 갱신하고 루트 변경 이벤트를 전송하여 뷰를 갱신합니다.

var errorRoute = $route.routes[null]; // assuming the "otherwise" route is the 404
// a route instance is an object that inherits from the route and adds
// new properties representing the routeParams and locals.
var errorRouteInstance = angular.inherit(
    errorRoute,
    {
        params: {},
        pathParams: {},
    }
);
// The $route service depends on this being set so it can recover the route
// for a given route instance.
errorRouteInstance.$$route = errorRoute;

var last = $route.current;
$route.current = errorRouteInstance;

// the ng-view code doesn't actually care about the parameters here,
// since it goes straight to $route.current, but we should include
// them anyway since other code might be listening for this event
// and depending on these params to behave as documented.
$rootScope.broadcast('$routeChangeSuccess', errorRoute, last);

상기의 경우, 「그 이외의」루트에 「해결」스텝이 없는 것을 전제로 하고 있습니다. 「 」 「 」 「 」 「 」 「 」 「 」 에는 기대를 걸지 않는 로 하고 있습니다.$routeParams이는 물론 '경로' 루트에 해당되지만 다른 루트를 사용하는 경우에는 해당되지 않을 수 있습니다.

구현 세부 정보와 인터페이스에 따라 위의 항목 중 무엇이 달라지는 불분명합니다.$routeChangeSuccess만, 「 」는 「 」입니다.$$route루트 인스턴스의 속성은 더블 달러 기호 이름으로 지정된 루트시스템의 구현 상세인 것 같습니다.키를 사용하여 루트테이블에 유지되는 '그렇지 않은' 루트의 상세null구현에 관한 상세 정보일 수도 있습니다.따라서 이 모든 것이 언급되어 있지만, 이 동작은 향후 버전의 Angular에서는 기능하지 않을 수 있습니다.JS.

상세한 것에 대하여는, 이 이벤트를 취급하는 코드를 참조해 주세요.이 코드는, 상기의 예에 근거해 사용한 이벤트 송신 코드와 함께, 최종적으로 상기의 코드가 만족하려고 하는 것입니다.이러한 링크에서 추론할 수 있듯이 이 게시물의 정보는 작성 시 1.2.0-snapshot이라고 라벨이 붙어 있는 AngularJs의 최신 마스터브런치에서 취득한 것입니다.

언급URL : https://stackoverflow.com/questions/19012915/angularjs-redirect-without-pushing-a-history-state

반응형