我在Angular Js中创建了一个网页。每当我从Home
页面导航到其他页面并点击该页面上的Home
按钮时,它就会导航回Home
页面,这是预期的并且正常工作。但是,当我再次单击Home
按钮,然后我希望页面刷新(因为目前它是Home
页面),但它没有发生。
答案 0 :(得分:4)
当您尝试前往的路线的$location
与您当前的路线相同时,Angular不会重新加载视图。
您可以使用reload()
方法来实现此目的。
见https://docs.angularjs.org/api/ngRoute/service/$route
(确保切换api版本以匹配您正在使用的Angular版本)
对于更清洁的解决方案(imho)而不是使用搜索参数,请参阅以下代码(我使用的是controllerAs语法):
angular.module('app').controller('MainController', [
'$location',
'$route',
function ($location, $route) {
var main = this;
main.goToHome = function () {
if ($location.path() === '/') {
$route.reload();
}
};
}
]);
结合在点击时调用主页按钮链接上的该功能:
<a href="#/" ng-click="main.goToHome()">Home</a>
此功能会在您单击按钮时检查位置,如果位置为/
,则会重新加载视图。
当然,您可以使用您的家庭路线使用的任何网址替换路线网址。
答案 1 :(得分:0)
以下是我提出的未经测试的替代解决方案。
在主页的路径配置对象中(我假设其网址为/home
),请指定以下参数:
{
// ...
reloadOnSearch: true,
redirectTo: function (routeParams, path, search) {
if (search.redirected) {
// don't redirect, so return same path + search
return '/home?redirected=true';
} else {
return '/home';
},
// ...
}
我们的想法是,当您链接到/home
时,redirectTo()
功能会触发并将您重定向到/home?redirected=true
。这将是对搜索参数的更改,因此路由应该由于指定reloadOnSearch: true
而正确重新加载。由于主页链接始终指向/home
,因此页面应始终重新加载。
它有点难看,并且可能会导致主页控制器在从其他页面返回主页时运行两次,但如果你无法通过任何其他方式工作,这个可能值得一个尝试。