AngularJS $location이 경로를 변경하지 않음
양식을 제출한 후 페이지 URL을 변경하는 데 문제가 있습니다.
내 앱의 흐름은 다음과 같습니다.
- 루트가 설정되고 URL이 어떤 폼페이지에 인식됩니다.
- 페이지 로드, 컨트롤러 변수 설정, 명령어 실행
- AJAX를 사용하여 특수 폼을 제출하는 특수 폼 디렉티브가 기동된다.
- 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
오브젝트 및window
object에는 위치 또는 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
'programing' 카테고리의 다른 글
하이버네이트를 사용한 Spring Boot에서의 데이터베이스 이행 처리 방법 (0) | 2023.02.28 |
---|---|
BEGIN - PL/SQL에서 Atomic 트랜잭션을 종료합니다. (0) | 2023.02.28 |
예상되는 할당 또는 함수 호출: no-used-expressions ReactJS (0) | 2023.02.28 |
Wordpress에서 SQL 주입을 방지하는 방법 (0) | 2023.02.28 |
요소에서 각도 Get 컨트롤러 (0) | 2023.02.28 |