【发布时间】:2014-03-20 01:55:50
【问题描述】:
<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 服务为easier testing and mocking 提供的,你可以使用类似的东西:
$scope.reloadPage = function(){$window.location.reload();}
还有:
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
顺便说一句,我不认为 $route.reload() 实际上会重新加载页面,而是 only the route。
【讨论】:
$window 而不是window。
$window docs 解释,主要是因为reloadPage 在使用$window 时会(更好)可测试。
location.reload();
成功了。
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
不需要路由或任何简单的旧js
【讨论】:
$window 提供程序,可以在测试中进行模拟
类似于 Alexandrin 的回答,但使用 $state 而不是 $route:
(来自 JimTheDev 的 SO 回答 here。)
$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();
【讨论】:
这可以通过在 JavaScript 中调用 reload() 方法来完成。
location.reload();
【讨论】:
使用$route.reload() 很容易(不要忘记将 $route 注入您的控制器),但从您的示例中,您可以使用“href”而不是“ng-href”:
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
您只需要使用 ng-href 来保护用户免受他们在 Angular 替换 {{ }} 标签的内容之前点击导致的无效链接。
【讨论】:
在 Angular 1.5 上 - 在尝试了上述一些解决方案后,只想重新加载数据而不刷新整页,我在正确加载数据时遇到了问题。不过我注意到,当我转到另一条路线然后返回当前路线时,一切正常,但是当我只想使用$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'
});
}])
它对我来说很好用。它不会刷新整个页面,而只会导致当前控制器和模板重新加载。我知道这有点 hacky,但这是我找到的唯一解决方案。
【讨论】:
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });;无需创建随机路线。但是看看哪些代码不会为您重新评估会很有趣。看起来甚至redirectTos 和resolve 函数re-execute on a normal $route.reload()(查看console.log 的)。
<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>
在控制器中
$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 });
}
};
在路由文件中
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
所以,如果 url 中传递的 id 与单击锚点调用的函数中的 id 相同,则只需重新加载,否则按照请求的路线。
如果有帮助,请帮我改进这个答案。欢迎大家提出建议。
【讨论】:
这可以通过在纯 JavaScript 中调用窗口对象的 reload() 方法来完成
window.location.reload();
【讨论】:
【讨论】: