У меня старая проблема с навигацией по высоте: A position: fixes
навигация сверху и содержимое с margin-top: $naviHeight
ниже.
Навигационная система может изменять высоту, когда данные загружаются асинхронно, и поэтому поле содержимого должно меняться вместе с ней.
Я хочу, чтобы это было самодостаточным. Таким образом, нет кода, в котором данные загружаются, но только в задействованных html-элементах/директивах.
В настоящее время я делаю это в AngularJS 1.2.0 с таким таймером:
/*
* Get notified when height changes and change margin-top
*/
.directive( 'emHeightTarget', function(){
return {
link: function( scope, elem, attrs ){
scope.$on( 'heightchange', function( ev, newHeight ){
elem.attr( 'style', 'margin-top: ' + (58+newHeight) + 'px' );
} );
}
}
})
/*
* Checks this element periodically for height changes
*/
.directive( 'emHeightSource', ['$timeout', function( $timeout ) {
return {
link: function( scope, elem, attrs ){
function __check(){
var h = elem.height();
if( h != scope.__height ){
scope.__height = h;
scope.$emit( 'heightchange', h );
}
$timeout( __check, 1000 );
}
__check();
}
}
} ] )
У этого есть очевидный недостаток использования таймера (который я чувствую как-то некрасиво) и определенную задержку после изменения размера навигации, пока содержимое не будет перемещено. p >
Есть ли лучший способ сделать это?