我的问题的简短版本是:如何在不需要触发路由更改或不需要在当前显示的页面上运行所有控制器的情况下更改 URL?
细节:
我有一个显示在其中的模板,该模板<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
。我的链接必须很漂亮:)