<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Voglio ricaricare la pagina. Come posso fare questo?
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Voglio ricaricare la pagina. Come posso fare questo?
Risposte:
È possibile utilizzare il reload
metodo del $route
servizio. Iniettare $route
nel controller e quindi creare un metodo reloadRoute
sul proprio $scope
.
$scope.reloadRoute = function() {
$route.reload();
}
Quindi puoi usarlo sul link in questo modo:
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Questo metodo farà ricaricare la rotta corrente. Se tuttavia desideri eseguire un aggiornamento completo, puoi iniettare $window
e utilizzare quello:
$scope.reloadRoute = function() {
$window.location.reload();
}
Modifica successiva (ui-router):
Come menzionato da JamesEddyEdwards e Dunc nelle loro risposte, se si utilizza angular-ui / ui-router è possibile utilizzare il seguente metodo per ricaricare lo stato / percorso corrente. Basta iniettare $state
invece di $route
e quindi hai:
$scope.reloadRoute = function() {
$state.reload();
};
window
L'oggetto è reso disponibile tramite il $window
servizio per test e derisioni più facili , puoi scegliere qualcosa come:
$scope.reloadPage = function(){$window.location.reload();}
E :
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Come nota a margine, non credo che $ route.reload () ricarichi effettivamente la pagina, ma solo il percorso .
$window
invece di window
.
$window
documenti , soprattutto è perché reloadPage
sarebbe (meglio) verificabile quando si utilizza $window
.
location.reload();
Fa il trucco.
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
Non c'è bisogno di percorsi o altro semplicemente vecchi js
La mia soluzione per evitare il ciclo infinito era quella di creare un altro stato che ha effettuato il reindirizzamento:
$stateProvider.state('app.admin.main', {
url: '/admin/main',
authenticate: 'admin',
controller: ($state, $window) => {
$state.go('app.admin.overview').then(() => {
$window.location.reload();
});
}
});
Angolare 2+
Ho trovato questo durante la ricerca di Angular 2+, quindi ecco il modo:
$window.location.reload();
È abbastanza facile da usare $route.reload()
(non dimenticare di iniettare $ route nel tuo controller), ma dal tuo esempio potresti semplicemente usare "href" invece di "ng-href":
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Devi solo utilizzare ng-href per proteggere l'utente da collegamenti non validi causati dal fatto che questi facciano clic prima che Angular abbia sostituito il contenuto dei tag {{}}.
Su Angular 1.5: dopo aver provato alcune delle soluzioni sopra descritte che desiderano ricaricare solo i dati senza aggiornamento completo della pagina, ho avuto problemi con il caricamento corretto dei dati. Ho notato, però, che quando vado su un'altra rotta e poi torno alla corrente, tutto funziona bene, ma quando voglio ricaricare solo la rotta corrente usando $route.reload()
, allora parte del codice non viene eseguito correttamente. Quindi ho provato a reindirizzare al percorso corrente nel modo seguente:
$scope.someFuncName = function () {
//go to another route
$location.path('/another-route');
};
e nella configurazione del modulo, aggiungine un altro 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'
});
}])
e funziona bene per me. Non aggiorna l'intera pagina, ma ricarica solo il controller e il modello correnti. So che è un po 'confuso, ma questa è stata l'unica soluzione che ho trovato.
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });
; non è necessario creare percorsi casuali. Ma sarebbe interessante vedere quale codice non rivaluta per te. Sembra che anche redirectTo
S e resolve
le funzioni di ri-eseguire su un normale$route.reload()
(sguardo al console.log del).
<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>
e nel 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 });
}
};
e nel file di route
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
Quindi, se l'id passato nell'URL è uguale a quello che proviene dalla funzione chiamata facendo clic sull'ancora, quindi semplicemente ricaricare, altrimenti seguire il percorso richiesto.
Aiutatemi a migliorare questa risposta, se questo aiuta. Qualsiasi suggerimento è il benvenuto.
Vorrei suggerire di fare riferimento alla pagina. Suggerimento ufficiale
Questo può essere fatto chiamando il metodo reload () in JavaScript.
location.reload();