我创建这个函数是为了嵌入svg
export function svgLoader( path: string, targetObj: ElementRef ){
let graphic = new XMLHttpRequest;
graphic.open('GET', path, !0),
graphic.send(),
graphic.onload = (a)=>{
let b = document.createElement('div');
b.setAttribute('style', 'visibility: hidden'),
b.innerHTML = graphic.responseText,
targetObj.insertBefore(b, targetObj.childNodes[0])
}
}
targetObj
参数是要取一个由@ViewChild
装饰器引用的DOM元素。函数按预期工作,但是我在控制台中得到了这些错误属性“插入前”不存在于“EngEntEnf”类型上。
属性“子节点”不存在于类型“元素”中。
我原来有
targetObj:string
,它仍然有效,注意到错误是为什么我把它改为元素。有没有什么特别的方法来处理这个问题,或者我应该忽略这个错误?更新
我只是想说,函数不是在组件内部定义的。我将它导入,以便可以根据需要在多个组件上使用它。这就是我的组件的外观。
export class SomeClass implements OnInit {
@ViewChild('svgDrop') SVGDrop: ElementRef;
ngOnInit(){
svgLoader('../../../../assets/tld_sprite02.svg', this.SVGDrop.nativeElement);
}
}
我注意到这些响应主要是基于处理类内的事情,我试图找出定义
targetObj
变量类型的方法,以便它接受用@ViewChild()
装饰器调用的元素。 最佳答案
必须使用nativeElement
对象的ElementRef
属性:
targetObj.nativeElement.insertBefore(b, targetObj.childNodes[0])
因为
insertBefore
实际上是本机dom属性,而不是targetObj
本身的属性。以下是Angular documentation的完整示例:
import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
关于angular - 需要帮助正确输入功能参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49542063/