【问题标题】:How to add custom method to a angular component?如何将自定义方法添加到角度组件?
【发布时间】:2021-01-07 06:40:06
【问题描述】:

我正在使用 Ionic 框架,并为 IonButton 组件创建了一个新指令,它实际上禁用了按钮,然后在进程完成时将其重新启用(假设这是一个保存进度)。

这是我的按钮模板

<ion-button fill="clear" color="primary" expand="block" (click)="acceptRequest()" [submitButton]="true">
    ACCEPT
</ion-button>

[submitButton] 是我的指令中的输入,用于启用点击侦听器。

我可以在点击后使用@HostListener禁用按钮并修改其内容,

@HostListener('click') onButtonClick() {
const spinnerContent = `<ion-spinner name="dots"></ion-spinner>`
    if (this.isSubmitButton) {
        const spinnerContent = `<ion-spinner name="dots"></ion-spinner>`
        this.buttonElement.disabled = true;

        const btnChildren = this.el.nativeElement.children;
        this.oldElement = this.el.nativeElement.cloneNode(true);

        for (let child of btnChildren) {
          this.renderer.removeChild(this.el.nativeElement, child);
        }
        this.el.nativeElement.innerHTML = spinnerContent;
    }
}

问题是如何在保存过程完成后实现何时重新启用按钮。我正在使用 RxJS 将数据保存在 acceptRequest() 方法中。假设我正在保存到 API,然后重新启用按钮。

我知道的一些例子是IonRefresher,我们可以很容易地调用event.target.complete()来完成加载微调器并从页面中隐藏刷新器。

谢谢。

编辑: 我知道在按钮内部使用 [disabled] 比使用指令更容易,但是我需要更改元素的子节点,并且可以轻松使用。所以我想到了使用指令作为解决方案。

【问题讨论】:

    标签: javascript angular ionic-framework


    【解决方案1】:

    您可以 viewChild 按钮,并将其强制转换为指令,同时在指令上公开 API 以停止微调器(并重新启用您想要的一切)。

    在指令中,您添加一个要公开的函数,然后在您的组件中,在模板上,添加#myBtn:

    <ion-button #myBtn fill="clear" color="primary" expand="block" (click)="acceptRequest()" [submitButton]="true">
        ACCEPT
    </ion-button>
    

    在组件本身中,您可以将子组件强制转换为指令:

    @ViewChild("myBtn", { read: SubmitDirective }) myBtn: SubmitDirective;
    

    然后,在完成 API 调用后,您可以在刚刚创建的指令上调用函数 (this.myBtn.stopSpinner())

    这是一个新的工作stackblitz

    【讨论】:

    • 对不起,我想我错过了问题中的一些内容。在主机侦听器上,它不仅禁用按钮,而且使用微调器更改按钮内部的 DOM。我修改了问题,希望您能进一步提供帮助;)。无论如何,谢谢你的回答。
    • 它正在工作!谢谢你的回答。赞成。有没有其他方法可以从按钮事件本身访问这些方法?像其他离子组件一样,我们可以从模板传递事件,然后从那里执行event.target.complete()?
    • 也许你可以创建一个输出并返回一个主题,然后你可以完成,我以前从未做过,所以不能真正提供帮助(我大多选择加入该选项我给出了答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2019-11-08
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多