<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 reloadyöntemini kullanabilirsiniz $route. Inject $routecontroller 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 $windowve 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 $stateyerine sadece enjekte edin $routeve sonra:
$scope.reloadRoute = function() {
$state.reload();
};
windownesne, 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ı .
$windowyerine window.
$windowdokümanlar tarafından açıklanmaktadır , çünkü esas reloadPageolarak 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 redirectTos ve resolveiş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();