2013-03-18 34 views
6

我采用了棱角分明的scrollToanchorScroll这样的:如何停止角度重新加载时的地址改变

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!

任何人都可以告诉你怎么观察的事件,可以防止默认

回答

1

这一事件发出在rootScope上,所以你可以使用01注册一个观察者方法。

$scope.$on('$locationChangeStart', function(ev) { 
    ev.preventDefault(); 
}); 
+0

我已经把在scrollTo功能和它的作品,但问题是,然后我的其他点击左侧菜单上停止工作,因为这是chnaging哈希为好。我怎么只能防止在particualr点击链接时,只有 – user1865341 2013-03-19 01:09:38

+0

我不知道如果你能。你可能有管理与'$ anchorScroll()'一样好,甚至重新考虑你的设计这些链接。顺便说一句,那个片段进入你的控制器功能不是在你的'scrollTo'功能。 – cezar 2013-03-26 18:28:44

6

您可以添加$事件参数到NG-click处理程序:

<a ng-click="scrollTo('foo', $event)">Foo</a> 

和scrollTo功能,你可以做下一个:

scope.scrollTo = function(str, event) { 
    event.preventDefault(); 
    event.stopPropagation(); 

    /** SOME OTHER LOGIC */ 
} 

但是,这意味着你应该手动解析来自“a”元素的目标锚点散列。

9

刷新正在发生的事情,因为没有到locationChangeStart事件的调用。您可以通过执行停止此:

scope.$on('$locationChangeStart', function(ev) { 
    ev.preventDefault(); 
}); 

其实我最后写一个使用它这里面叫我自己scrollTo指令。

Plnkr/Github

My other post about this here

相关问题