programing

Angular에서 $location으로 리디렉션하는 방법.path를 $120으로 지정합니다.성공 후 콜백

codeshow 2023. 4. 2. 11:44
반응형

Angular에서 $location으로 리디렉션하는 방법.path를 $120으로 지정합니다.성공 후 콜백

POST를 php 파일로 전송하여 간단한 인증 서비스를 만들려고 합니다.홈 페이지를 부분적으로 로딩하려면 이 서비스가 필요합니다.ng-view성공했을 때.

제가 시도한 것은 다음과 같습니다.

function loginCtrl($scope, $http, $location){
    $http.post(url,data).success(function(data){
        $location.path('/home');
    });
}

결과 URL이 변경되지만ng-view업데이트되지 않습니다.수동으로 페이지를 갱신하면 갱신됩니다.

(로 올바르게 설정되어 있습니다.$routeProvider콜백이 아닌 스탠드아론 함수를 사용하여 리다이렉트 테스트를 실시했습니다).

또, 그 정의도 해봤습니다.$location.path('/home')콜백으로 호출해도 동작하지 않습니다.

조사를 해보니 다른 서드파티 플러그인을 사용할 때 이 현상이 발생한다는 기사가 몇 개 있었습니다.저는 angular.js만 로드하고 있습니다.

학습 자료에 대한 통찰력이나 조언이 있으면 좋겠습니다.

다음은 이 기사의 changeLocation 예시입니다.http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase

//be sure to inject $scope and $location
var changeLocation = function(url, forceReload) {
  $scope = $scope || angular.element(document).scope();
  if(forceReload || $scope.$$phase) {
    window.location = url;
  }
  else {
    //only use this if you want to replace the history stack
    //$location.path(url).replace();

    //this this if you want to change the URL and add it to the history stack
    $location.path(url);
    $scope.$apply();
  }
};

공식 가이드에는 다음과 같은 간단한 답이 있습니다.

그게 뭘 안 하는데?

브라우저 URL이 변경되어도 페이지 전체가 새로고침되지는 않습니다.URL 변경 후 페이지를 새로고침하려면 하위 API인 $window.location.href를 사용합니다.

출처 : https://docs.angularjs.org/guide/$location

페이지 리다이렉트(로그인에서 홈페이지로)는 아래와 같습니다.사용자 오브젝트를 홈페이지에도 전달해야 합니다.그래서 윈도우 로컬 스토리지를 사용하고 있습니다.

    $http({
        url:'/login/user',
        method : 'POST',
        headers: {
            'Content-Type': 'application/json'
          },
        data: userData
    }).success(function(loginDetails){
        $scope.updLoginDetails = loginDetails;
        if($scope.updLoginDetails.successful == true)
            {
                loginDetails.custId = $scope.updLoginDetails.customerDetails.cust_ID;
                loginDetails.userName = $scope.updLoginDetails.customerDetails.cust_NM;
                window.localStorage.setItem("loginDetails", JSON.stringify(loginDetails));
                $window.location='/login/homepage';
            }
        else
        alert('No access available.');

    }).error(function(err,status){
        alert('No access available.');      
    });

그리고 나한테도 효과가 있었어

사용하는 대신success, 로 변경합니다.then그리고 그것은 동작한다.

코드는 다음과 같습니다.

lgrg.controller('login', function($scope, $window, $http) {
    $scope.loginUser = {};

    $scope.submitForm = function() {
        $scope.errorInfo = null

        $http({
            method  : 'POST',
            url     : '/login',
            headers : {'Content-Type': 'application/json'}
            data: $scope.loginUser
        }).then(function(data) {
            if (!data.status) {
                $scope.errorInfo = data.info
            } else {
                //page jump
                $window.location.href = '/admin';
            }
        });
    };
});

$window.location을 사용합니다.href = '/Home.html';

아주 쉬운 암호지만 벌금을 물기는 어렵습니다.

detailsApp.controller("SchoolCtrl", function ($scope, $location) { 
      $scope.addSchool = function () {

        location.href='/ManageSchool/TeacherProfile?ID=' + $scope.TeacherID;
      }
});

언급URL : https://stackoverflow.com/questions/14301524/in-angular-how-to-redirect-with-location-path-as-http-post-success-callback

반응형