gpt4 book ai didi

javascript - 在 Angular 中链接和滚动到顶部的标准方法?

转载 作者:行者123 更新时间:2023-11-30 17:22:52 25 4
gpt4 key购买 nike

我的问题是 href 保留滚动位置,但我想让我的链接转到页面顶部;我目前的解决方案感觉不是很干。

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'">

现在应该没有在 Controller 本身中明确定义的功能。

据此:

Can I make a function available in every controller in 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);
}
});

现在我不需要在每个 Controller 中重复该功能,但我认为这是避免 $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);
});
}
}
}]);

关于javascript - 在 Angular 中链接和滚动到顶部的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com