AngularJS - 滚动到元素是否属于指令?

时间:2016-02-05 13:55:53

标签: jquery angularjs angular-ui-router

我很清楚DOM操作属于指令而不是控制器,但我很想知道简单地滚动到一个元素(使用jQuery的scrollTop)是否会被视为DOM操作和/或应该是转入指令。

我的页面是动态生成的(使用Grails),并在页面的一角放置一个小的引导下拉列表,以方便滚动到冗长文档中的位置:

<a ng-click="scrollTo('question${ subQuestion.id}')">

${}在发送给客户端时会被替换为数字。

我的控制器中的scrollTo功能非常简单且有效:

$scope.scrollTo = function(id) {
    $('html, body').animate({
        scrollTop: $('#' + id).offset().top - 50
    }, 1000);
};

我正在使用ui-router,之前使用$uiViewScroll滚动到该元素;这似乎更符合角度方式,但由于导航栏我需要50px偏移,我更喜欢动画(两者似乎都不是$uiViewScroll的选项)。

<小时/> 我的问题:

  • 滚动到元素是否会产生任何消化后果,如真正的DOM操作?
  • 滚动到指令之外的元素是不好的做法?如果是这样,为什么?

1 个答案:

答案 0 :(得分:1)

  • 滚动在正常摘要周期之外运行,请参阅此帖子How can I hide an element when the page is scrolled?
  • 我会说这是不好的做法,因为它包含对DOM中元素的引用,但那只是我...... :-)也许它可以使控制器的测试更难,因为你需要处理$