Angular中链接和滚动到顶部的标准方式
Standard way to link and scroll to top in Angular?
我的问题是,href保留滚动位置,但我想有我的链接去页面的顶部;我现在的解决方案感觉不是很DRY。
HTML:<a href="" ng-click="goToPage()"></a>
JS:
app.controller("SomeController", function(..., $location) {
//this ends up being repeated in many controllers
$scope.goToPage = function() {
$location.path('/some/page');
window.scrollTo(0,0);
}
});
是否有一种方法来制作这样的指令?
<a href="" ng-link="'some/page'">
现在控制器本身不应该有明确定义的函数。
根据这个:
我能让一个函数在angular的每个控制器中都可用吗?
另一种解决方案是,我可以在$rootScope中放入一个函数,并像这样使用它:
HTML:<a href="" ng-click="goToPage('some/page')"></a>
JS:
app.run( function(..., $location) {
$rootScope.goToPage = function(url) {
$location.path(url);
window.scrollTo(0,0);
}
});
现在我不需要在每个控制器中重复这个函数,但我认为这是一个好地方,可以避免使用$rootScope,并学习如何在可能的情况下制作指令(服务?)谢谢!
你可以这样做:
app.run(function($rootScope, $window) {
$rootScope.$on('$routeChangeSuccess', function () {
$window.scrollTo(0,0);
});
});
,它会滚动到顶部的任何路由更改。
如果你真的想把它作为一个指令:
angular.module('app')
.directive('ngLink', ['$location', '$window', function ($location, $window) {
return {
restrict: 'A', //use as attribute
replace: false,
scope: {
'ngLink' : '@' //so you can do ng-link="some-page"
//instead of ng-link="'some-page'"
},
link: function (scope, elem) {
elem.on('click', function() {
$location.path(scope.ngLink);
//$window.location.href = scope.ngLink;
//you may have to use the line above depending
//on how your project is set up
$window.scrollTo(0,0);
});
}
}
}]);
相关文章:
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- jQuery粘性插件可变顶部间距
- 使用jQuery更改元素的顶部位置
- 背景图像顶部的滚动图像不移动
- 滚动然后捕捉到顶部而不是取消捕捉
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 如何在离子框架+有角度的框架中制作顶部标签
- 如何允许web浏览器记住未以标准方式发送的表单字段
- 计算“;“左”;以及“;顶部“;来自固定位置浮动元素的值
- 如何在引导程序元素的顶部添加掩码
- 滚动到Rails 4应用程序中的顶部jQuery
- 将列表元素动画制作到顶部
- 抵消在具有pageY计算的相对容器中位于顶部
- 输入类型按钮返回历史记录并返回顶部
- 滚动固定滚动顶部()的跳跃效果
- 如何将图表放在顶部和底部
- 通过水平滚动将页眉固定到页面顶部
- Angular中链接和滚动到顶部的标准方式
- 为什么标准是将css和js文件分别放在页面的顶部和底部