我遇到了旧的可变高度导航问题:position: fixes
顶部导航和margin-top: $naviHeight
下面的内容。当异步加载数据时,导航可以改变高度,因此内容的边距必须随之改变。
我希望这是自给自足的。所以没有加载数据的代码,但只在涉及的 html-elements/directives 中。
目前我正在使用这样的计时器在 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();
}
}
} ] )
这具有使用计时器的明显缺点(我觉得有点难看)和导航调整大小后的一定延迟,直到内容被移动。
有一个更好的方法吗?