如何停止角度重新加载时的地址改变
问题描述:
我采用了棱角分明的scrollTo
和anchorScroll
这样的:如何停止角度重新加载时的地址改变
app.controller('TestCtrl', function($scope, $location, $anchorScroll) {
$scope.scrollTo = function(id) {
$location.hash(id);
$anchorScroll();
}
});
<a ng-click="scrollTo('foo')">Foo</a>
<div id="foo">Here you are</div>
我的问题是,当我点击链接页面滚动下来,但在案件的50%页面重新加载,因为URL中的哈希值发生变化。
我如何防止重新加载页面角?
更新: 我发现这里
https://groups.google.com/forum/?fromgroups=#!msg/angular/BY2ekZLbnIM/MORF-z2vHnIJ
是
The $location service broadcasts a $locationChangeStart event. You can observe that and call event.preventDefault() to stop the navigation. Nice!
任何人都可以告诉你怎么观察的事件,可以防止默认
答
这一事件发出在rootScope上,所以你可以使用01注册一个观察者方法。
$scope.$on('$locationChangeStart', function(ev) {
ev.preventDefault();
});
答
您可以添加$事件参数到NG-click处理程序:
<a ng-click="scrollTo('foo', $event)">Foo</a>
和scrollTo功能,你可以做下一个:
scope.scrollTo = function(str, event) {
event.preventDefault();
event.stopPropagation();
/** SOME OTHER LOGIC */
}
但是,这意味着你应该手动解析来自“a”元素的目标锚点散列。
答
刷新正在发生的事情,因为没有到locationChangeStart事件的调用。您可以通过执行停止此:
scope.$on('$locationChangeStart', function(ev) {
ev.preventDefault();
});
其实我最后写一个使用它这里面叫我自己scrollTo指令。
答
为了防止从页面中的角度锚重装,添加一个空href属性。
<a href ng-click="scrollTo('foo')">Foo</a> OR <a href="" ng-click="scrollTo('foo')">Foo</a>
答
我想这可能帮助ü
$scope.redirectTodiv = function(divname,event) {
var id = $location.hash();
$location.hash(divname);
$anchorScroll();
$location.hash(id);
};
我已经把在scrollTo功能和它的作品,但问题是,然后我的其他点击左侧菜单上停止工作,因为这是chnaging哈希为好。我怎么只能防止在particualr点击链接时,只有 – user1865341 2013-03-19 01:09:38
我不知道如果你能。你可能有管理与'$ anchorScroll()'一样好,甚至重新考虑你的设计这些链接。顺便说一句,那个片段进入你的控制器功能不是在你的'scrollTo'功能。 – cezar 2013-03-26 18:28:44