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-роутер):

Як згадували JamesEddyEdwards та Dunc у своїх відповідях, якщо ви використовуєте angular -ui / ui-router, ви можете використовувати наступний метод для перезавантаження поточного стану / маршруту. Просто введіть $stateзамість цього $routeі тоді у вас є:

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

2
Це хороша відповідь, якщо ви відчайдушно бажаєте розширити перезавантаження.
spikeheap

Як я можу змінити цю поведінку в усьому світі замість того, щоб додавати дію до всіх посилань
OMGPOP

@OMGPOP Що саме ти маєш на увазі під усіма посиланнями у всьому світі?
Олександрін Русь

я маю на увазі, для всіх посилань вам потрібно це зробити. чи можна один раз налаштувати всі посилання?
OMGPOP

@AlexandrinRus це дає мені наступні [$ rootScope: infdig] досягнуто 10 $ перетворень () ітерацій. Аборт!
альфапілгрим

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 () фактично перезавантажує сторінку, а лише маршрут .


2
Я рекомендую використовувати $windowзамість цього window.
Jeroen

Дякуємо за ваш внесок. Ви б пояснили нам, чому?
Флоріан Ф.

1
Так, вибачте. Це найкраще пояснюється в $windowдокументації , в основному це тому , що reloadPageбуло б (краще) перевіряється , коли він використовує $window.
Jeroen


14

Схожа на відповідь Олександріна, але використовуючи $ state, а не $ route:

(З відповіді ДжимТеДева тут .)

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

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

9

Якщо ви використовуєте Angulars, більш просунутий інтерфейс, який я напевно рекомендую, тепер ви можете просто скористатися:

$state.reload();

Що по суті робить те саме, що відповідь Данка.


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
це, до речі, не властиве кутовому, до речі, його JavaScript.
Нітін

1

Досить просто використовувати $route.reload()(не забудьте ввести $ route у свій контролер), але з вашого прикладу ви можете просто використовувати "href" замість "ng-href":

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

Вам потрібно використовувати лише ng-href, щоб захистити користувача від недійсних посилань, викликаних ним натисканням, перш ніж Angular замінить вміст тегів {{}}.


$ 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's).
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-адресі, такий же, як і функція, викликана натисканням на якір, а потім просто перезавантажте, інакше простежте потрібний маршрут.

Будь ласка, допоможіть мені покращити цю відповідь, якщо це допоможе. Будь-які пропозиції вітаються.


На це мені знадобився один місяць, щоб зрозуміти, чому сторінка не перезавантажується
сам

0

Це можна зробити за допомогою виклику методу reload () вікна в простому JavaScript

window.location.reload();


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.