我的问题的简短版本是:如何更改 URL,而不需要触发路由更改或不需要运行当前显示页面上的所有控制器?
Details:
我有一个模板,显示在<ng-view>
其区域由 3 个控制器管辖。在页面的最顶部我有一个交互式地图。当您单击该区域时,它会广播一次单击,其他组件会接收该单击并显示有关该区域的数据。设置非常简单。
我想做的是允许我的用户深层链接到内容。因此,每次有人点击链接时,我都想更改可以复制并粘贴到另一个浏览器的 URL。其他一些用户只需单击链接即可看到与第一个用户看到的相同状态。
目前,我使用与此类似的代码更改位置:
$scope.$on('mapRegionClick', function($scope, regionCode) {
var url = generateURL(regionCode);
$scope.currentScope.$apply(function(){
$location.path(url);
});});
然后,在我的路由中获取该 URL,并且地图和数据会正确显示。这样做的缺点是,每次我单击地图并且 URL 更改时,整个模板/视图都会重新生成。因为生成地图有点繁重,所以我只想触发对数据呈现控制器的更改。
是否可以?如何?
我可以在控制器之间进行一些通信并实现我的目标,但随后我将无法进行深度链接。
PS:我不想用$location.search()
and reloadOnSearch=false
。我的链接必须很漂亮:)
听起来你不想使用$route http://docs.angularjs.org/api/ngRoute.%24route服务。
The $route
服务旨在重新加载控制器,以便导航到 URL 和刷新 URL 之间没有区别。我们通过在每次 URL 更改时完全重新加载来实现此目的。这是故意的。
听起来像你的用例,不应该使用$route
, just $location http://docs.angularjs.org/api/ng.%24location and ng-include http://docs.angularjs.org/api/ng.directive%3angInclude.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)