<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Sayfayı yeniden yüklemek istiyorum. Bunu nasıl yapabilirim?
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Sayfayı yeniden yüklemek istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
Hizmetin reload
yöntemini kullanabilirsiniz $route
. Inject $route
controller içerisinde ve daha sonra bir yöntem oluşturmak reloadRoute
, sizinle ilgili şu $scope
.
$scope.reloadRoute = function() {
$route.reload();
}
O zaman bağlantıda şu şekilde kullanabilirsiniz:
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Bu yöntem, mevcut rotanın yeniden yüklenmesine neden olacaktır. Yine de tam bir yenileme yapmak istiyorsanız, bunu enjekte edebilir $window
ve kullanabilirsiniz:
$scope.reloadRoute = function() {
$window.location.reload();
}
Daha sonra düzenleme (ui-yönlendirici):
JamesEddyEdwards ve Dunc tarafından cevaplarında belirtildiği gibi, açısal-ui / ui-yönlendirici kullanıyorsanız, mevcut durumu / rotayı yeniden yüklemek için aşağıdaki yöntemi kullanabilirsiniz. Bunun $state
yerine sadece enjekte edin $route
ve sonra:
$scope.reloadRoute = function() {
$state.reload();
};
window
nesne, daha kolay test etme ve alay etme$window
için hizmet aracılığıyla kullanıma sunulur , aşağıdaki gibi bir şeyle gidebilirsiniz:
$scope.reloadPage = function(){$window.location.reload();}
Ve :
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Bir yan not olarak, $ route.reload () işlevinin sayfayı gerçekten yeniden yüklediğini düşünmüyorum, sadece rotayı .
$window
yerine window
.
$window
dokümanlar tarafından açıklanmaktadır , çünkü esas reloadPage
olarak kullanıldığında (daha iyi) test edilebilir olacaktır $window
.
location.reload();
Hile yapıyor.
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
Rotalara veya herhangi bir şeye gerek yok, sadece eski js
Angulars'ı kesinlikle tavsiye edeceğim daha gelişmiş bir ui-yönlendirici kullanıyorsanız, şimdi basitçe kullanabilirsiniz:
$state.reload();
Temelde Duncan'ın cevabıyla aynı şeyi yapıyor.
Sonsuz döngüden kaçınmak için benim çözümüm, yeniden yönlendirmeyi yapan başka bir durum oluşturmaktı:
$stateProvider.state('app.admin.main', {
url: '/admin/main',
authenticate: 'admin',
controller: ($state, $window) => {
$state.go('app.admin.overview').then(() => {
$window.location.reload();
});
}
});
Açısal 2+
Bunu Angular 2+ ararken buldum, işte yol:
$window.location.reload();
Kullanması yeterince kolaydır $route.reload()
(denetleyicinize $ route enjekte etmeyi unutmayın), ancak örneğinizden "ng-href" yerine "href" kullanabilirsiniz:
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Angular, {{}} etiketlerinin içeriğini değiştirmeden önce, kullanıcıyı tıklamalarının neden olduğu geçersiz bağlantılardan korumak için yalnızca ng-href kullanmanız gerekir.
Angular 1.5'te - tam sayfa yenilemeden yalnızca verileri yeniden yüklemek isteyen yukarıdaki çözümlerden bazılarını denedikten sonra, verileri düzgün yükleme konusunda sorunlar yaşadım. Yine de fark ettim ki, başka bir rotaya gittiğimde ve daha sonra akıma geri döndüğümde, her şeyin yolunda gittiğini, ancak kullanarak sadece mevcut rotayı yeniden yüklemek istediğimde $route.reload()
, kodun bir kısmının düzgün şekilde çalıştırılmadığını fark ettim . Daha sonra şu şekilde mevcut rotaya yeniden yönlendirmeyi denedim:
$scope.someFuncName = function () {
//go to another route
$location.path('/another-route');
};
ve modül yapılandırmasında başka bir tane ekleyin 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'
});
}])
ve benim için gayet iyi çalışıyor. Sayfanın tamamını yenilemez, ancak yalnızca geçerli denetleyicinin ve şablonun yeniden yüklenmesine neden olur. Biraz karmaşık olduğunu biliyorum ama bulduğum tek çözüm buydu.
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });
; rastgele rotalar oluşturmaya gerek yok. Ancak hangi kodun sizin için yeniden değerlendirilmediğini görmek ilginç olurdu. Görünüşe göre redirectTo
s ve resolve
işlevler normal bir şekilde yeniden çalışıyor$route.reload()
(console.log'lara bakın).
<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>
ve kontrolörde
$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 });
}
};
ve rota dosyasında
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
Dolayısıyla, url'de iletilen kimlik, bağlantıya tıklayarak çağrılan işlevden gelenle aynıysa, basitçe yeniden yükleyin, aksi takdirde istenen yolu izleyin.
Yardımcı olacaksa, lütfen bu yanıtı geliştirmeme yardım edin. Herhangi bir öneriye açığız.
Bu, JavaScript'te reload () yöntemi çağrılarak yapılabilir.
location.reload();