"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o AngularJS $watch pode substituir temporizadores no ajuste dinâmico da altura da navegação?

Como o AngularJS $watch pode substituir temporizadores no ajuste dinâmico da altura da navegação?

Publicado em 2024-11-05
Navegar:168

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

Evitando temporizadores na observação de altura para AngularJS

Os programadores AngularJS geralmente enfrentam o desafio da navegação responsiva quando a altura da navegação é dinâmica. Isso leva à necessidade de ajustar o valor da margem superior do conteúdo em resposta às alterações na altura da navegação.

Anteriormente, um cronômetro era usado para detectar alterações na altura da navegação, mas essa abordagem tinha desvantagens: o uso de um cronômetro e um atraso no ajuste da margem superior do conteúdo.

Felizmente, existe uma abordagem melhor: aproveitar a funcionalidade $watch do AngularJS. Em vez de um cronômetro, um observador é registrado em 'emHeightSource', que é invocado durante cada ciclo $digest. O inspetor atualiza a propriedade '__height'.

Em 'emHeightTarget', outro inspetor monitora '__height' e atualiza o valor da margem superior de acordo, garantindo que a margem superior do conteúdo mude suavemente e em sincronia com a navegação height.

Aqui está o código refinado usando observadores:

/*
 * 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();
            } );
        }
    }

} )
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3