一个人如何克隆或复制一种方法,从而不保留对原始方法的引用?
我正在尝试使用DOM复制元素上的click函数并将其分配给另一个元素,因此我可以从DOM中删除第一个元素,而不会丢失另一个元素上的函数引用。我在指令中这样做。
element.click = parent.click //need a better way to copy
element.click() //works
remove(parent)
element.click() //doesn't work
之所以这样做,是因为我要删除为其分配了(单击)方法的parent-wrapper标记,以便仅保留其内部按钮模板。但是,由于我要删除包装器标签,因此父标签上的(单击)不会传递给模板按钮标签。
例如,我有一个app-button组件,其模板中带有一个按钮。
当前已呈现:
<app-button (click) = function(1, 2)>
<button>
</button>
</app-button>
我想删除父标记,这是通过DOM操作来完成的,但是想要维护(click)函数,例如:
<button (click) = function(1, 2)>
</button>
答案 0 :(得分:0)
我不太确定我是否理解您为什么要尝试做自己正在做的事情(或确切地说是在做什么),但是根据我的理解,您可以在组件类中存储对宿主元素”的引用,那么您可以在模板中的<button>
元素上分配一个侦听器,以触发对该引用的点击事件:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, Component, ViewChild, ElementRef, Renderer2, OnInit} from '@angular/core';
@Component({
selector: 'app-root',
template: `
<app-button (click)="foo()"></app-button>
`
})
export class AppComponent {
foo() {
console.log('bar');
}// end function
}// end class
@Component({
selector: 'app-button',
template: `<button #button (click)="onClick()">Click me</button>`
})
export class AppButtonComponent implements OnInit {
@ViewChild('button')
private button:ElementRef;
constructor(
private element:ElementRef,
private renderer:Renderer2
) {}
ngOnInit() {
let parent = this.element.nativeElement.parentElement,
element = this.element.nativeElement,
button = this.button.nativeElement;
this.renderer.insertBefore(parent, button, element );
this.renderer.removeChild(parent, element);
}// end function
onClick() {
let element = this.element.nativeElement;
element.click();
}// end function
}// end class