内部方法完成后,如何关闭LoadingController?

时间:2020-04-11 11:07:28

标签: angular typescript ionic-framework ionic4

我正在下面创建一个LoadingController,进行介绍并执行一些方法:

this.loadingCtrl.create({
      message: 'Sending Message...'
    }).then(loadingEl => {
      loadingEl.present();
      this.conversationsService.addMessageToConversation(this.conversation.id, this.form.value.message);
      this.loadMsg();
      this.form.reset();
    });

addMessageToConversation()成功之后,我就想dismiss LoadingController。

有人可以告诉我我该怎么做吗?

如果需要的话,这里是addMessageToConversation()

addMessageToConversation(conversationId: string, message: string) {
    this._conversations.getValue().find(conversation => conversation.id === conversationId)
      .messages.push(
        new Message(
          Math.random().toString(),
          message,
          this.authService.userId,
          new Date(Date.now())
        ));
  }

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。

  1. 方法完成后,您可以发出事件。
  2. 您可以从对象中返回由.find()方法创建的Promise。从那里,您的组件代码中可以使用async / await或.then()调用加载控制器的.dismiss()。

我建议使用方法2,因为这是“正常”的。将服务的方法转变为承诺后,您可以按以下方式调整代码:

this.loadingCtrl.create({
      message: 'Sending Message...'
    }).then(async loadingEl => {
      loadingEl.present();
      const res = await this.conversationsService.addMessageToConversation(this.conversation.id, this.form.value.message);
      this.loadMsg();
      this.form.reset();
      this.loadingCtrl.dismiss()
      
    });

  • 注意:这还不完整,所以我无法测试语法错误。希望你明白了。