克隆/复制Java方法?

时间:2019-07-18 15:23:46

标签: javascript angular typescript

一个人如何克隆或复制一种方法,从而不保留对原始方法的引用?

我正在尝试使用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>

1 个答案:

答案 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