<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
我想重新加载页面。我该怎么做?
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
我想重新加载页面。我该怎么做?
您可以使用$route
服务的reload
方法。在控制器中注入$route
,然后在您的$scope
上创建一个reloadRoute
方法。
$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();
}
如JamesEddyEdwards和Dunc在他们的回答中提到的那样,如果你正在使用angular-ui/ui-router,你可以使用以下方法重新加载当前状态/路由。只需注入$state
而不是$route
,然后你就有:
$scope.reloadRoute = function() {
$state.reload();
};
window
对象通过 $window
服务提供,以便于更容易地进行测试和模拟。你可以尝试以下代码:
$scope.reloadPage = function(){$window.location.reload();}
并且:
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
顺便提一下,我认为$route.reload()并不会重新加载整个页面,而是只会重新加载路由。
$window
而不是window
。 - Jeroen$window
文档进行解释(https://docs.angularjs.org/api/ng/service/$window),主要是因为当`reloadPage`使用`$window`时,它会更容易测试。 - Jeroen location.reload();
有效果。
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
不需要路由或任何其他东西,只需使用普通的JavaScript。
$window
提供者,可以在测试中进行模拟。 - Bruno Vasconcelos与Alexandrin的答案类似,但使用$state而不是$route:
(来自JimTheDev的SO答案这里。)
$scope.reloadState = function() {
$state.go($state.current, {}, {reload: true});
}
<a ng-click="reloadState()" ...
我避免无限循环的解决方案是创建另一个状态,该状态已进行了重定向:
$stateProvider.state('app.admin.main', {
url: '/admin/main',
authenticate: 'admin',
controller: ($state, $window) => {
$state.go('app.admin.overview').then(() => {
$window.location.reload();
});
}
});
Angular 2+
我在搜索Angular 2+时发现了这个,所以这里是方法:
最初的回答
$window.location.reload();
location.reload();
$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); });
,不需要创建随机路由。但是看看哪些代码不会重新评估会很有趣。看起来即使是 redirectTo
和 resolve
函数在普通的 $route.reload()
上也会重新执行(查看 console.log)。 - Hashbrown很容易地使用$route.reload()
(不要忘记在控制器中注入$route),但从您的示例中,您可以使用“href”而不是“ng-href”:
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
您只需要使用ng-href来保护用户免受在Angular替换{{}}标签的内容之前点击而导致的无效链接。