programing

AngularJS $location이 경로를 변경하지 않음

lovejava 2023. 2. 28. 23:08

AngularJS $location이 경로를 변경하지 않음

양식을 제출한 후 페이지 URL을 변경하는 데 문제가 있습니다.

내 앱의 흐름은 다음과 같습니다.

  1. 루트가 설정되고 URL이 어떤 폼페이지에 인식됩니다.
  2. 페이지 로드, 컨트롤러 변수 설정, 명령어 실행
  3. AJAX를 사용하여 특수 폼을 제출하는 특수 폼 디렉티브가 기동된다.
  4. AJAX가 실행된 후(Angular가 AJAX를 처리하지 않음) 콜백이 실행되어 디렉티브가 호출됩니다.$scope.onAfterSubmit위치를 설정하는 함수입니다.

문제는 위치를 설정한 후 아무 일도 일어나지 않는다는 것입니다.로케이션 파라미터를 다음과 같이 설정해 보았습니다./그리고...아뇨, 저도 제출하지 않으려고 노력했어요아무것도 안 돼.

코드가 에 도달하는지 테스트했습니다.onAfterSubmit기능(기능합니다).

내 유일한 생각은 (지령에서 호출된 이후) 함수의 범위가 어떻게든 변경된다는 것입니다만, 다시 한 번 어떻게 호출할 수 있을까요?onAfterSubmit스코프가 변경되었을 경우

여기 제 코드가 있습니다.

var Ctrl = function($scope, $location, $http) {
  $http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
    $scope.resource = data;
  });

  $scope.onAfterSubmit = function() {
    $location.path('/').replace();
  };
}
Ctrl.$inject = ['$scope','$location','$http'];

누가 나 좀 도와줄래?

나도 며칠 전에 비슷한 문제가 있었어.제 경우는 서드파티 라이브러리(정확히 말하면 jQuery)로 변경했는데, 이 경우 호출함수와 설정변수 동작은 Angular가 항상 변경이 있는 것을 인식하지 못하기 때문에 소화가 되지 않습니다.

$apply()는 각도 프레임워크 외부에서 식을 실행하기 위해 사용됩니다(예: 브라우저의 DOM 이벤트, setTimeout, XHR 또는 서드파티 라이브러리에서).

사용해보십시오.$scope.$apply()장소를 변경하고 전화를 한 직후에replace()앵글에게 상황이 변했다는 걸 알려줘야지

대신$location.path(...)페이지를 변경하거나 새로 고치기 위해 서비스를 이용했습니다.Angular에서 이 서비스는 에 대한 인터페이스로 사용됩니다.window오브젝트 및windowobject에는 위치 또는 URL과 관련된 작업을 처리할 수 있는 속성이 포함되어 있습니다.

예를 들어,window.location다음과 같이 새 페이지를 할당할 수 있습니다.

$window.location.assign('/');

또는 다음과 같이 새로 고칩니다.

$window.location.reload();

그것은 나에게 효과가 있었다.당신이 기대하는 것과는 조금 다르지만 주어진 목표를 위해 효과가 있습니다.

저도 같은 문제가 있었습니다만, $location으로의 콜은 이미 다이제스트 내에 있었습니다.$apply()를 호출하면 프로세스 오류가 이미 발생한 $digest가 표시됩니다.

은 효과가 있었다해야 한다).$location컨트롤러에 접속할 수 있습니다.

$timeout(function(){ 
   $location...
},1);

이게 왜 필요한지는 모르겠지만...

는 내 것을 끼워 넣어야 했다.$location.path()다이제스트가 아직 실행 중이었기 때문에 다음과 같이 기술합니다.

       function routeMe(data) {                
            var waitForRender = function () {
                if ($http.pendingRequests.length > 0) {
                    $timeout(waitForRender);
                } else {
                    $location.path(data);
                }
            };
            $timeout(waitForRender);
        }

이 경우 템플릿 설정에 옵션 파라미터 인디케이터(?)가 없는 것이 문제였습니다.

예를 들어 다음과 같습니다.

.when('/abc/:id?', {
    templateUrl: 'views/abc.html',
    controller: 'abcControl'
})


$location.path('/abc');

질문 문자가 없으면 루트가 변경되지 않고 루트 파라미터가 억제됩니다.

각의 / 의 라우터$state.go('yourstate')$location나한테는 효과가 있었어

(CoffeeScript에서) 이 기능을 사용할 수 있습니다.

 $location.path '/url/path'
 $scope.$apply() if (!$scope.$$phase)

제 생각에는 $apply()를 만지작거리면 원치 않는 오류가 발생할 수 있기 때문에 이 답변의 대부분은 약간 허술한 것 같습니다($apply()나 $timeout).

일반적으로 $location이 작동하지 않는 경우, 이는 어떤 것이 각진 방식으로 구현되지 않았음을 의미합니다.

이 질문에서는 비각선 AJAX 부분에 문제가 있는 것 같습니다.$location을 사용한 리다이렉션은 약속이 해결된 후에 해야 하는 것과 같은 문제가 있었습니다.나는 이 예에서 그 문제를 설명하고 싶다.

이전 코드:

taskService.createTask(data).then(function(code){
            $location.path("task/" + code);
        }, function(error){});

주의: taskService.createTask는 약속을 반환합니다.

$q - 약속을 사용하는 각진 방법:

let dataPromises = [taskService.createTask(data)];
        $q.all(dataPromises).then(function(response) {
                let code = response[0];
                $location.path("task/" + code);
            }, 
            function(error){});

$q를 사용하여 약속을 해결하면 리다이렉션 문제가 해결되었습니다.

$q 서비스에 대한 자세한 내용은http://https://docs.angularjs.org/api/ng/service/$q 를 참조해 주세요.

setTimeout(function() { $location.path("/abc"); },0);

네 문제를 해결할 수 있을 거야

언급URL : https://stackoverflow.com/questions/11784656/angularjs-location-not-changing-the-path