我有一个非常简单的AngularJS应用程序,其中包含两个路径:
#/search
#/results
当我从一条路线导航到另一条路线时,一切都按照我的预期运作。获取所需的任何资源,并完美显示内容。
问题是当我从一条路线导航到同一条路线(即,#/结果到#/结果)时,绝对没有任何反应。我从浏览器的角度理解没有发生任何事情,但我真的很喜欢AngularJS重新加载内容。
这一定很容易,但我在这方面画空白。有人可以帮我解释一下吗?
谢谢,
乔恩
答案 0 :(得分:14)
当您导航到同一页面时,浏览器会忽略它
Angular.js与<a href="">
的默认行为无关。
您可以做的是创建一个自定义指令:
$route.reload()
重新加载当前视图(路线)。$location.path(newPath)
导航到其他视图。我做了example:
app.directive('xref',function($route, $location){
return {
link: function(scope, elm,attr){
elm.on('click',function(){
if ( $location.path() === attr.xref ) {
$route.reload();
} else {
scope.$apply(function(){
$location.path(attr.xref);
});
}
});
}
};
});
在您的视图中,只需创建:
<a xref="/">Home</a>
<a xref="/links">Links</a>
答案 1 :(得分:3)
您可以检查当前路线是否与“目的地”路线相同,并调用$route
的 reload()
方法:
<强>重载()强>
即使$ location未更改,也会导致$ route服务重新加载当前路由 因此,ngView创建新范围,重新实现控制器。
E.g:
在HTML中:
<a href="" ng-click="toResults()">Results</a>
在控制器中:
// ...first have `$location` and `$route` injected...
$scope.toResults = function () {
var dstPath = '/results';
if ($location.path() === dstPath) {
$route.reload() ;
} else {
$location.path(dstPath);
}
}
答案 2 :(得分:0)
我也使用了routeparams属性来比较url参数,它就像魅力一样。如果有人再次面临这个问题,请按照以下方式解决问题:
if ($location.path() === '/destination' && $routeParams.Name == Name) {
$route.reload();
}
else {
$location.path('/destination').search({ Name: Name });
}