1

在我的应用程序中,我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);      
});

还要记住,我使用reloadOnSearchfalse 来不重新加载控制器。

通常我通过更改$location.search和工作正常来触发它

一切正常,但在某些情况下,我想在不更改搜索参数的情况下触发此行为

我试图将搜索参数再次更改为相同的值-> 不走运。

如果我将其更改为另一个值,那么routeUpdate火灾并且一切正常。

那么如何在routeUpdate不更改参数值的情况下手动触发$location.search

4

1 回答 1

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())

但是在您当前的代码中,您对 from 的参数不做任何事情$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依赖于与$browserurl 的比较,因此如果不更改 url 的有意义部分,您将无法真正正常启动它:

https://github.com/angular/angular.js/blob/master/src/ng/location.js#L560

于 2013-08-03T15:13:29.987 回答