作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个附加元素的 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
官方文档中的这段话:
Use this API as the last resource when direct access to DOM is needed.
我的问题是——我怎样才能正确地将这个指令迁移到 Angular 2?我唯一的要求是动态构建一个元素并使用指令将其附加到该元素。
最佳答案
使用Renderer
Angular 提供的操作 DOM 的方法:
import { DOCUMENT } from '@angular/common';
export class MyDirective implements OnInit {
constructor(
private elementRef: ElementRef,
private renderer: Renderer2,
@Inject(DOCUMENT) private document: Document) { }
ngOnInit() {
const child = this.document.createElement('div');
this.renderer.appendChild(this.elementRef.nativeElement, child);
}
}
这不依赖于像 appendChild()
这样的原生 DOM API,所以在某种程度上它是一种独立于平台的方法。
关于angular - 如何从 Angular 2 中的指令附加动态 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45085567/
我是一名优秀的程序员,十分优秀!