代码之家  ›  专栏  ›  技术社区  ›  wilcotroost

如何修复Angular中的(Safari和IE)溢出问题?

  •  0
  • wilcotroost  · 技术社区  · 7 年前

    为了获得可滚动的div,我使用了CSS溢出:auto。这在IE和Safari中不起作用,但只在Chrome中起作用。在失败的浏览器中,我被迫在同一个DIV的CSS中放置一个固定的高度。

    和其他许多人一样,我希望我的应用程序能够调整大小。因此,在调整大小事件上使用offsetTop属性和一些typescript计算似乎可行。我在DOM中直接操作DIV,正如我在这里发现的那样,这不是最好的方法。

    1. 我想在应用程序启动时进行计算,而不仅仅是在调整大小事件之后。使用角度生命周期挂钩,我不断得到错误的计算。我认为DOM还没有解决。
    2. 我想用角度指令绑定到DIV的{style:height=XXpx}属性,但我得到了这个错误: “ExpressionChangedAfterItHasBeenCheckedError:Expression在检查后已更改。以前的值:“高度:728px”。当前值:“高度:715px”

    假设我是一个恐龙,作为一个经典的开发者,但在我生命中的这个时刻,我是一个做Angular和javascript的婴儿。我真的很感谢你的帮助。

    提前感谢!

    帮助后编辑:

    Koudela的回答在很大程度上帮助了我发现ngAfterViewChecked的第二遍为我提供了元素的正确属性值。现在我可以进行正确的计算,并在列表中输入正确的高度。ngAfterViewChecked适用于两个初始en-resize。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Koudela    7 年前

    一个简单的resize指令:

    import { Directive, ElementRef, Input, OnInit } from '@angular/core';
    
    @Directive({
        selector: '[doResize]'
    })
    export class DoResizeDirective implements OnInit {
    
        @Input('doResize') size: number;
    
        constructor(private el: ElementRef) { }
    
        ngOnInit() {
            this.doResize(null);
        }
    
        private doResize(size: number) {
            this.el.nativeElement.style.height = (size || this.size || 20) + 'px';
        }
    }
    

    <div [doResize]="200"></div>
    

    Plunk示例: http://embed.plnkr.co/thIHksY1ZzIHVCpiLmfj/

    添加您的计算应该是直接的。

    如果您一直得到错误的计算,请使用以下方法检查生命周期挂钩中的各个值: console.log(yourElement.clientHeight) .

    考虑ngDoCheck()、ngOnChanges()或@HostListener在初始页面加载或交互后的更改。

    官方指南: https://angular.io/guide/attribute-directives