[javascript] AngularJS를 사용하여 전체 페이지를 다시로드하거나 다시 렌더링하는 방법

여러 사용자 컨텍스트를 기반으로 전체 페이지를 렌더링하고 여러 $http요청을 한 후 사용자가 컨텍스트를 전환하고 모든 것을 다시 렌더링 할 수 있기를 원합니다 (모든 $http요청을 다시 보내는 등). 다른 곳으로 사용자를 리디렉션하면 제대로 작동합니다.

$scope.on_impersonate_success = function(response) {
  //$window.location.reload(); // This cancels any current request
  $location.path('/'); // This works as expected, if path != current_path
};

$scope.impersonate = function(username) {
  return auth.impersonate(username)
    .then($scope.on_impersonate_success, $scope.on_auth_failed);
};

를 사용 하면 응답을 기다리는 요청 $window.location.reload()중 일부가 취소되어 사용할 수 없습니다. 또한 해킹 이 작동하지 않습니다 (아무것도 일어나지 않습니다).$httpauth.impersonate(username)$location.path($location.path())

모든 요청을 수동으로 다시 발행하지 않고 페이지를 다시 렌더링하는 다른 방법이 있습니까?



답변

레코드의 경우 각도가 현재 페이지를 다시 렌더링하도록하려면 다음을 사용할 수 있습니다.

$route.reload();

AngularJS 문서 에 따르면 :

$ location이 변경되지 않은 경우에도 $ route 서비스가 현재 경로를 다시로드합니다.

그 결과 ngView는 새로운 범위를 생성하고 컨트롤러를 다시 인스턴스화합니다.


답변

$route.reload()컨트롤러를 다시 초기화하지만 서비스는 초기화하지 않습니다. 응용 프로그램의 전체 상태를 재설정하려면 다음을 사용할 수 있습니다.

$window.location.reload();

이것은 $ window 서비스 주입에 액세스 할 수 있는 표준 DOM 메소드 입니다 .

예를 들어 Django 또는 다른 웹 프레임 워크를 사용하고 새로운 서버 측 렌더링을 원할 때와 같이 서버에서 페이지를 다시로드하려면 문서에서 설명한대로 true매개 변수 로을 전달하십시오 . 서버와의 상호 작용이 필요하기 때문에 속도가 느려질 수 있습니다.reload

앵귤러 2

위에서 내가 각도 2를 사용하고 있지 않다 각도 1. 적용, 서비스와 같은 모습이있다, 거기에 다른 Router, Location하고 DOCUMENT. 나는 거기에서 다른 행동을 테스트하지 않았다


답변

주어진 경로 경로에 대한 페이지를 다시로드하려면 :-

$location.path('/path1/path2');
$route.reload();


답변

각도 UI 라우터를 사용하는 경우 이것이 가장 좋은 솔루션입니다.

$scope.myLoadingFunction = function() {
    $state.reload();
};


답변

컨트롤러의 종속성을 선언 할 때 “$ route”를 추가하는 것을 잊었을 수 있습니다.

app.controller('NameCtrl', ['$scope','$route', function($scope,$route) {
   // $route.reload(); Then this should work fine.
}]);


답변

모든 것을 다시로드하려면 window.location.reload (); angularjs로

작업 예 확인

HTML

<div ng-controller="MyCtrl">
<button  ng-click="reloadPage();">Reset</button>
</div>

앵귤러 JS

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.reloadPage = function(){window.location.reload();}
}

http://jsfiddle.net/HB7LU/22324/


답변

사용중인 서비스를 새로 고치는 동안 컨트롤러를 새로 고치려면이 솔루션을 사용할 수 있습니다.

  • $ state 주입

app.controller('myCtrl',['$scope','MyService','$state', function($scope,MyService,$state) {

    //At the point where you want to refresh the controller including MyServices

    $state.reload();

    //OR:

    $state.go($state.current, {}, {reload: true});
}

그러면 컨트롤러와 HTML을 새로 고치며 Refresh 또는 Re-Render라고도 합니다.