在我的应用程序中,我使用routeUpdate
检查$location.search
字符串是否已更改,并在我的视图中相应地导航。
像这样。
$scope.$on('$routeUpdate', function(next, current) {
var slide_key = $location.search().slide_key;
if (slide_key)
$scope.go_to_slide(slide_key);
});
另请注意,我使用reloadOnSearch
false来重新加载控制器。
通常我会通过更改$location.search
触发此操作并正常工作
一切正常但有一种情况我想触发此行为而不更改搜索参数。
我尝试将搜索参数再次更改为相同的值 - >没运气。
如果我将其更改为其他值,则routeUpdate
会触发,一切正常。
那么我怎样才能手动触发routeUpdate
而不更改$location.search
中的参数值?
答案 0 :(得分:6)
我认为您是正确的,如果您想触发真正的$routeUpdate
事件而不会影响$location.absUrl()
的网址更改,则必须手动干预。
此示例触发$ routeUpdate事件:
<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a>
// or the precise broadcast would be:
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl())
但是在您当前的代码中,您对$routeUpdate
中的参数不做任何操作,因此您也可以为$routeUpdate
广播假冒或替代事件。
其他看起来更清洁的替代方案有其原因无法运作:
$route.reload()
总是强制实际的更新路径:
https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L352 https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L415
$location
依赖于与$browser
网址的比较,因此您无法在不更改网址的有意义部分的情况下正常启动它:
https://github.com/angular/angular.js/blob/master/src/ng/location.js#L560