![](/img/trans.png)
[英]angular ui-router: how do I reload a state when a path parameter changes but not reload when a query parameter changes?
[英]How to stop Angular to reload when address changes
我正在使用Angular的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中的哈希值发生了变化。
如何防止Angular重新加载页面?
更新:我在这里找到了
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!
任何人都可以告诉如何观察该事件并防止违约
刷新正在发生,因为有一个对locationChangeStart事件的调用。 你可以这样做:
scope.$on('$locationChangeStart', function(ev) {
ev.preventDefault();
});
我实际上最终编写了自己的scrollTo指令,该指令在其中使用了这个调用。
您可以在ng-click处理程序中添加$ event参数:
<a ng-click="scrollTo('foo', $event)">Foo</a>
在scrollTo函数中,您可以执行下一个操作:
scope.scrollTo = function(str, event) {
event.preventDefault();
event.stopPropagation();
/** SOME OTHER LOGIC */
}
但这意味着您应该手动解析“a”元素中的目标锚点哈希值。
我想这可能会对你有所帮助
$scope.redirectTodiv = function(divname,event) {
var id = $location.hash();
$location.hash(divname);
$anchorScroll();
$location.hash(id);
};
该事件在rootScope上发出,因此您可以使用$on
方法注册观察者。
$scope.$on('$locationChangeStart', function(ev) {
ev.preventDefault();
});
要防止页面在角度锚点中重新加载,请添加一个空的href属性。
<a href ng-click="scrollTo('foo')">Foo</a> OR <a href="" ng-click="scrollTo('foo')">Foo</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.