”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > AngularJS $watch 如何替代动态导航高度调整中的计时器?

AngularJS $watch 如何替代动态导航高度调整中的计时器?

发布于2024-11-05
浏览:857

How Can AngularJS $watch Replace Timers in Dynamic Navigation Height Adjustment?

避免 AngularJS 的高度监视计时器

当导航高度是动态时,AngularJS 程序员经常面临响应式导航的挑战。这就导致需要调整内容的 margin-top 值以响应导航高度的变化。

以前,使用计时器来检测导航高度的变化,但这种方法有缺点:使用计时器和调整内容的 margin-top 出现延迟。

幸运的是,存在更好的方法:利用 AngularJS 的 $watch 功能。在“emHeightSource”中注册了一个观察程序,而不是计时器,该观察程序在每个 $digest 周期期间被调用。观察者更新 '__height' 属性。

在 'emHeightTarget' 中,另一个观察者监视 '__height' 并相应更新 margin-top 值,确保内容的 margin-top 平滑变化并与导航同步height.

这里是使用观察者的精炼代码:

/*
 * Get notified when height changes and change margin-top
 */
.directive( 'emHeightTarget', function() {
    return {
        link: function( scope, elem, attrs ) {

            scope.$watch( '__height', function( newHeight, oldHeight ) {
                elem.attr( 'style', 'margin-top: '   (58   newHeight)   'px' );
            } );
        }
    }
} )

/*
 * Checks every $digest for height changes
 */
.directive( 'emHeightSource', function() {

    return {
        link: function( scope, elem, attrs ) {

            scope.$watch( function() {
                scope.__height = elem.height();
            } );
        }
    }

} )
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3