Javascript 如何在不更改$location.search中参数值的情况下触发routeUpdate
在我的应用程序中,我使用Javascript 如何在不更改$location.search中参数值的情况下触发routeUpdate,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,在我的应用程序中,我使用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); }); 还要记住,我使
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
,一切正常
因此,如何在不更改
$location.search
中的参数值的情况下手动触发路由更新
?我认为你是对的,如果你想触发一个真正的$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())
//或者确切的广播是:
//$rootScope.$broadcast(“$locationChangeSuccess”,$location.absUrl(),$location.absUrl())
但在当前代码中,您对$routeUpdate
中的参数不做任何处理,因此您也可以只为$routeUpdate
广播一个虚假或备用事件
其他看起来更干净的替代方案有其无法工作的原因:
<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a>
// or the precise broadcast would be:
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl())
$route.reload()
始终强制实际更新路径:
$location
依赖于与$browser
的url的比较,因此如果不更改url中有意义的部分,就无法使其正常启动:
我认为你是对的,如果你想触发一个真正的
$routeUpdate
事件而不改变影响$location.absUrl()
的url,你必须手动干预
此示例触发$routeUpdate事件:
<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a>
// or the precise broadcast would be:
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl())
//或者确切的广播是:
//$rootScope.$broadcast(“$locationChangeSuccess”,$location.absUrl(),$location.absUrl())
但在当前代码中,您对$routeUpdate
中的参数不做任何处理,因此您也可以只为$routeUpdate
广播一个虚假或备用事件
其他看起来更干净的替代方案有其无法工作的原因:
<a ng-click="$emit('$locationChangeSuccess','hiya')" href="">update route</a>
// or the precise broadcast would be:
// $rootScope.$broadcast('$locationChangeSuccess',$location.absUrl(), $location.absUrl())
$route.reload()
始终强制实际更新路径:
$location
依赖于与$browser
的url的比较,因此如果不更改url中有意义的部分,就无法使其正常启动:
你能为这个拼凑一个小拼盘吗。这样调试会更容易。干杯我想我知道如何实现这一点,但我需要你的一些代码(可能是控制器?),这样我才能看到我的想法如何融入你的代码中。@dcodesmith刚刚完成工作,要回家,明天你就可以拿到代码了。嘿,还在等着:)@dcodesmith,我想他是指他的下一个工作日。。我删减了我测试的路线示例,你能为我做一个小的JSFIDLE吗。这样调试会更容易。干杯我想我知道如何实现这一点,但我需要你的一些代码(可能是控制器?),这样我才能看到我的想法如何融入你的代码中。@dcodesmith刚刚完成工作,要回家,明天你就可以拿到代码了。嘿,还在等着:)@dcodesmith,我想他是指他的下一个工作日。。我删减了测试的路线示例,谢谢。这就是我要找的。我应该把作业做得更好。虽然我在$emit上使用了$routeUpdate,但效果很好。你的例子对我不起作用。对于我来说,小提琴是一项很难使用的服务,特别是由于插值的变化,以及像您所做的修复;-)酷!但是很抱歉,fiddle无法工作,jsfiddle似乎对保存和编辑的运行使用了单独的路径,因此您必须在运行它之前更改一些内容。:)看起来我们可以在未来的小提琴中使用带有较新角度的*路径来绕过它:谢谢。这就是我要找的。我应该把作业做得更好。虽然我在$emit上使用了$routeUpdate,但效果很好。你的例子对我不起作用。对于我来说,小提琴是一项很难使用的服务,特别是由于插值的变化,以及像您所做的修复;-)酷!但是很抱歉,fiddle无法工作,jsfiddle似乎对保存和编辑的运行使用了单独的路径,因此您必须在运行它之前更改一些内容。:)看起来我们可以使用带有较新角度的*路径在未来的小提琴中绕过它: