AngularJs : 페이지 새로 고침


135
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>

페이지를 새로 고침하고 싶습니다. 어떻게해야합니까?

답변:


265

서비스 reload방법을 사용할 수 있습니다 $route. $route컨트롤러에 주입 한 다음에 메소드를 작성 reloadRoute하십시오 $scope.

$scope.reloadRoute = function() {
   $route.reload();
}

그런 다음 다음과 같이 링크에서 사용할 수 있습니다.

<a ng-click="reloadRoute()" class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

이 방법을 사용하면 현재 경로가 다시로드됩니다. 그러나 전체 새로 고침을 수행하려는 경우 다음을 주입 $window하여 사용할 수 있습니다.

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


나중에 편집 (ui-router) :

답변에서 JamesEddyEdwards와 Dunc이 언급했듯이 angular-ui / ui-router 를 사용하는 경우 다음 방법을 사용하여 현재 상태 / 경로를 다시로드 할 수 있습니다. $state대신에 주사 $route하면 다음이 있습니다.

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

2
다시로드를 Angularise하는 데 필사적 인 경우 좋은 대답입니다.
spikeheap

모든 링크에 동작을 추가하는 대신이 동작을 전체적으로 변경하려면 어떻게해야합니까
OMGPOP

@OMGPOP 모든 링크에서 전 세계적으로 정확히 무엇을 의미합니까?
Alexandrin Rus

모든 링크에 대해이 작업을 수행해야합니다. 모든 링크에 대해 한 번만 구성 할 수 있습니까?
OMGPOP

@AlexandrinRus이 [$ rootScope : infdig] 10 $ digest () 반복에 도달했습니다. 중단 중!
alphapilgrim

52

window더 쉬운 테스트와 조롱을$window 위해 서비스를 통해 객체를 사용할 수 있습니다.

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

그리고 :

<a ng-click="reloadPage"  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

참고로, $ route.reload () 실제로 실제로 페이지를 다시로드한다고 생각하지는 않지만 route 만 생각 합니다 .


2
$window대신에 사용 하는 것이 좋습니다 window.
Jeroen

당신의 기여에 감사드립니다. 왜 그런지 설명해 주시겠습니까?
Florian F.

1
맞아 미안해. 그것은 문서에 의해 가장 잘 설명됩니다 .$window 주로 reloadPage사용 할 때 (더 나은) 테스트 할 수 있기 때문 입니다 $window.
Jeroen 2016 년

19
 location.reload(); 

트릭을 수행합니다.

<a ng-click="reload()">

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

경로가 필요하거나 평범한 오래된 JS가 필요하지 않습니다.


2
단순성을 사랑하십시오!
Shawn de Wet

14

Alexandrin의 답변과 비슷하지만 $ route 대신 $ state를 사용합니다.

(JimTheDev의 SO 답변 에서 여기에 있습니다 .)

$scope.reloadState = function() {
   $state.go($state.current, {}, {reload: true});
}

<a ng-click="reloadState()" ... 

9

내가 추천하는 Angulars 고급 ui-router 를 사용하는 경우 이제 간단하게 사용할 수 있습니다.

$state.reload();

본질적으로 Dunc의 대답과 동일합니다.


5

무한 루프를 피하는 내 해결책은 리디렉션을 만든 다른 상태를 만드는 것입니다.

$stateProvider.state('app.admin.main', {
    url: '/admin/main',
    authenticate: 'admin',
    controller: ($state, $window) => {
      $state.go('app.admin.overview').then(() => {
        $window.location.reload();
      });
    }
  });

2

앵귤러 2+

Angular 2+를 검색하는 동안 이것을 찾았으므로 다음과 같은 방법입니다.

$window.location.reload();

1
그건 그렇고, 자바 스크립트 방식으로 각도에 국한되지 않습니다.
Nitin Jadhav 2015 년

1

$route.reload()컨트롤러에 $ route를 삽입하는 것을 잊지 말고 사용하기는 쉽지만 예제에서 "ng-href"대신 "href"를 사용할 수 있습니다.

<a href=""  class="navbar-brand" title="home"  data-translate>PORTAL_NAME</a>

Angular가 {{}} 태그의 내용을 바꾸기 전에 클릭으로 인한 잘못된 링크로부터 사용자를 보호하려면 ng-href 만 사용하면됩니다.


$ route는 ng.route.IRouteService의 일부입니까?
크래커

1

Angular 1.5-전체 페이지를 새로 고치지 않고 데이터 만 다시로드하려는 위의 솔루션 중 일부를 시도한 후 데이터를 올바르게로드하는 데 문제가있었습니다. 그러나 다른 경로로 이동 한 다음 현재로 돌아갈 때 모든 것이 잘 작동하지만을 사용하여 현재 경로를 다시로드하려는 경우 $route.reload()일부 코드가 제대로 실행되지 않습니다. 그런 다음 다음 방법으로 현재 경로로 리디렉션하려고했습니다.

$scope.someFuncName = function () {
    //go to another route
    $location.path('/another-route');
};

그리고 모듈 설정에서 다른 것을 추가하십시오 when:

.config(['$routeProvider', function($routeProvider) {
     $routeProvider.when('/first-page', {
         templateUrl: '/first-template',
         controller: 'SomeCtrl'
     }).when('/another-route', {//this is the new "when"
         redirectTo: '/first-page'
     });
}])

그리고 그것은 나를 위해 잘 작동합니다. 전체 페이지를 새로 고치지는 않지만 현재 컨트롤러와 템플릿을 다시로드합니다. 나는 그것이 약간 해 키다는 것을 알고 있지만 그것이 내가 찾은 유일한 해결책이었다.


더 쉬운 방법은 var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });; 임의의 경로를 만들 필요가 없습니다. 그러나 어떤 코드가 다시 평가되지 않는지 보는 것은 흥미로울 것입니다. redirectTos 및 resolve함수 조차도 정상에서 다시 실행되는$route.reload() 것처럼 보입니다 (console.log 참조).
Hashbrown

1
<a title="Pending Employee Approvals" href="" ng-click="viewPendingApprovals(1)">
                    <i class="fa fa-user" aria-hidden="true"></i>
                    <span class="button_badge">{{pendingEmployeeApprovalCount}}</span>
                </a>

컨트롤러에서

 $scope.viewPendingApprovals = function(type) {
                if (window.location.hash.substring(window.location.hash.lastIndexOf('/') + 1, window.location.hash.length) == type) {
                    location.reload();
                } else {
                    $state.go("home.pendingApproval", { id: sessionStorage.typeToLoad });
                }
            };

그리고 경로 파일에서

.state('home.pendingApproval', {
        url: '/pendingApproval/:id',
        templateUrl: 'app/components/approvals/pendingApprovalList.html',
        controller: 'pendingApprovalListController'
    })

따라서 URL에 전달 된 ID가 앵커를 클릭하여 호출 된 함수에서 오는 것과 동일하면 다시로드하고 요청 된 경로를 따라갑니다.

도움이된다면이 답변을 개선하도록 도와주세요. 제안은 환영합니다.


왜 페이지가 다시로드되지 않는지 알아내는 데 1 개월이 걸렸습니다.
sam

0

일반 JavaScript에서 window 객체의 reload () 메서드를 호출하면됩니다.

window.location.reload();


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.