いくつかの類似したスレッドがありますが、私のニーズに合わせて適切な答え を見つけることができませんでした。だから直接DOMアクセスは厳密に回避する必要があります私はちょうどこれのためのベストプラクティスを疑問に思っています。Angular2の(DOM)要素の幅を取得する方法
私が達成しようとしているのは、現在の幅に基づいた要素のサイズ変更です。
workitemresize.component.ts
import { Directive, ElementRef, HostListener, Renderer, Input } from '@angular/core';
@Directive({
selector: '[workItemResize]'
})
export class WorkItemResizeDirective implements ngAfterViewInit {
private el: HTMLElement;
private renderer: Renderer;
constructor(el: ElementRef, public renderer: Renderer)
{
this.el = el.nativeElement;
this.renderer = renderer;
}
@HostListener('window:resize', ['$event.target'])
onResize()
{
this.resizeWorks();
}
ngAfterViewInit() {
this.resizeWorks();
}
private resizeWorks(): void {
this.renderer.setElementStyle(this.el, 'height', this.el.width); // <-- doesn't work I kow that this.el.width doesn't exist but just for demonstration purpose
this.renderer.setElementStyle(this.el, 'height', '500'); // <-- works
}
}
<div class="posts row">
<div class="work-item col-xs-12 col-sm-6 col-no-padding" workItemResize *ngFor="let post of posts">
<!-- show some fancy image -->
<div class="img" [ngStyle]="{'background-image':'url('+post.better_featured_image.source_url+')'}"></div>
</div>
</div>
関連projects.template.html:私は取得する方法を知らない https://github.com/angular/angular/issues/6515
エンドレスループのような音で現在のサイズに基づいてサイズを変更します。 –
initビューの直後で、window.resizeで - これはうまくいくはずです – kkern