AngularJs: Muat ulang halaman


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

Saya ingin memuat ulang halaman. Bagaimana saya bisa melakukan ini?

Jawaban:


265

Anda dapat menggunakan reloadmetode $routelayanan. Suntikkan $routedi pengontrol Anda dan kemudian buat metode reloadRoutedi komputer Anda $scope.

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

Maka Anda dapat menggunakannya pada tautan seperti ini:

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

Metode ini akan menyebabkan rute saat ini dimuat ulang. Namun jika Anda ingin melakukan penyegaran penuh, Anda bisa menyuntikkan $windowdan menggunakannya:

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


Kemudian edit (ui-router):

Seperti yang disebutkan oleh JamesEddyEdwards dan Dunc dalam jawaban mereka, jika Anda menggunakan angular-ui / ui-router Anda dapat menggunakan metode berikut untuk memuat ulang keadaan / rute saat ini. Suntikkan $statesaja $routedan kemudian Anda memiliki:

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

2
Ini adalah jawaban yang bagus jika Anda putus asa untuk Angularise isi ulang.
spikeheap

Bagaimana saya bisa mengubah perilaku ini secara global alih-alih menambahkan tindakan ke semua tautan
OMGPOP

@OMGPOP Apa sebenarnya yang Anda maksud dengan global untuk semua tautan?
Alexandrin Rus

maksud saya, untuk semua tautan yang perlu Anda lakukan ini. apakah mungkin untuk mengkonfigurasi sekali untuk semua tautan?
OMGPOP

@AlexandrinRus beri saya ini [$ rootScope: infdig] 10 $ digest () iterasi tercapai. Batalkan!
alphapilgrim

52

windowobjek tersedia melalui $windowlayanan untuk pengujian dan ejekan yang lebih mudah , Anda dapat menggunakan sesuatu seperti:

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

Dan:

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

Sebagai catatan, saya tidak berpikir $ route.reload () sebenarnya memuat ulang halaman, tetapi hanya rute .


2
Saya sarankan menggunakan $windowsebagai gantinya window.
Jeroen

Terima kasih atas kontribusi Anda. Bisakah Anda menjelaskan mengapa?
Florian F.

1
Ya maaf. Paling baik dijelaskan oleh para $windowdoktor , terutama karena reloadPageakan (lebih baik) dapat diuji saat digunakan $window.
Jeroen

19
 location.reload(); 

Apakah caranya.

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

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

Tidak perlu untuk rute atau apa pun hanya js tua biasa


2
suka kesederhanaan!
Shawn de Wet

14

Mirip dengan jawaban Alexandrin, tetapi menggunakan $ state daripada $ route:

(Dari jawaban JimTheDev SO di sini .)

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

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

9

Jika menggunakan Angulars ui-router lebih maju yang saya pasti akan merekomendasikan maka Anda sekarang dapat menggunakan:

$state.reload();

Yang pada dasarnya melakukan hal yang sama dengan jawaban Dunc.


5

Solusi saya untuk menghindari infinite loop adalah dengan membuat negara lain yang telah melakukan pengalihan:

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

2

2 Sudut

Saya menemukan ini ketika mencari Angular 2+, jadi inilah caranya:

$window.location.reload();

1
ini tidak spesifik untuk sudut, omong-omong, cara javascriptnya.
Nitin Jadhav

1

Cukup mudah untuk hanya menggunakan $route.reload()(jangan lupa untuk menyuntikkan $ route ke controller Anda), tetapi dari contoh Anda, Anda bisa menggunakan "href" alih-alih "ng-href":

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

Anda hanya perlu menggunakan ng-href untuk melindungi pengguna dari tautan yang tidak valid yang disebabkan oleh mereka mengklik sebelum Angular mengganti konten tag {{}}.


$ route adalah bagian dari ng.route.IRouteService ??
cracker

1

Pada Angular 1.5 - setelah mencoba beberapa solusi di atas yang ingin memuat ulang hanya data tanpa refresh halaman penuh, saya punya masalah dengan memuat data dengan benar. Saya perhatikan, bahwa ketika saya pergi ke rute lain dan kemudian saya kembali ke arus, semuanya berfungsi dengan baik, tetapi ketika saya hanya ingin memuat ulang rute saat ini menggunakan $route.reload(), maka beberapa kode tidak dijalankan dengan benar. Kemudian saya mencoba mengalihkan ke rute saat ini dengan cara berikut:

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

dan dalam konfigurasi modul, tambahkan yang lain 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'
     });
}])

dan itu bekerja dengan baik untuk saya. Itu tidak me-refresh seluruh halaman, tetapi hanya menyebabkan pengontrol dan templat saat ini memuat ulang. Saya tahu ini agak berantakan, tapi itu satu-satunya solusi yang saya temukan.


cara yang lebih mudah mungkin var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });; tidak perlu membuat rute acak. Tetapi akan menarik untuk melihat kode apa yang tidak dievaluasi ulang untuk Anda. Sepertinya even redirectTodan resolvefungsi dijalankan kembali secara normal$route.reload() (lihat 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>

dan di controller

 $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 });
                }
            };

dan dalam file rute

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

Jadi, Jika id yang dilewatkan dalam url sama dengan apa yang datang dari fungsi yang disebut dengan mengklik jangkar, maka cukup memuat ulang, kalau tidak ikuti rute yang diminta.

Tolong bantu saya meningkatkan jawaban ini, jika ini membantu. Any, saran dipersilahkan.


Ini memakan waktu satu bulan untuk mencari tahu mengapa halaman tidak memuat ulang
sam

0

Ini dapat dilakukan dengan memanggil metode reload () dari objek window dalam JavaScript biasa

window.location.reload();


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.