要素を追加するAngular 1.xディレクティブがあります。要するに:
app.directive('mydirective', function() {
template: '<ng-transclude></ng-transclude>',
link: function(el) {
var child = angular.element("<div/>");
el.append(child);
}
このディレクティブをAngular 2に次のように移行できます。
@Directive({
selector: '[mydirective']
})
export class MyDirective implements OnInit {
constructor(private elementRef: ElementRef) { }
ngOnit() {
var child = angular.element("<div/>");
this.elementRef.nativeElement.append(child);
}
}
私を悩ませているのは、nativeElement
公式ドキュメントのこの発言です:
DOMへの直接アクセスが必要な場合、このAPIを最後のリソースとして使用します。
私の質問は-このディレクティブをAngular 2に適切に移行するにはどうすればよいですか?私の唯一の要件は、要素を動的に構築し、ディレクティブで要素に追加することです。
DOMを操作するには、Angular=によって提供される Renderer
を使用します。
_import { DOCUMENT } from '@angular/common';
export class MyDirective implements OnInit {
constructor(private elementRef: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) { }
ngOnInit() {
const child = document.createElement('div');
this.renderer.appendChild(this.elementRef.nativeElement, child);
}
}
_
これはappendChild()
のようなネイティブDOM APIに依存しないため、ある意味ではプラットフォームに依存しないアプローチです。