【问题标题】:Error trying to dismiss Ionic Loader尝试关闭 Ionic Loader 时出错
【发布时间】:2018-03-31 13:16:11
【问题描述】:

我有一个 Ionic3 应用程序,它根据操作将数据发布到 API,在等待操作完成时,我使用 Ionic 的 LoadingController 显示一个加载器。

import { LoadingController } from 'ionic-angular';

我通过以下方式声明加载器:

this.loader = this.loadingCtrl.create({
   content: "Please wait..."
});

然后我使用加载器:

doSomething(item) {

    this.loader.present().then(()=>{

      this.item.begin(item).then((result) => {

        this.data = result;
        this.loader.dismiss();

      }, (error) => {
        console.log(error);
        this.loader.dismiss();
      });

    });

  }

我得到错误:

ERROR 错误:未捕获(承诺中):已插入视图 销毁

有人能指出我正确的方向吗?

环境:

cli packages: (/usr/local/lib/node_modules)

    @ionic/cli-utils  : 1.10.2
    ionic (Ionic CLI) : 3.10.3

global packages:

    Cordova CLI : 7.0.1

local packages:

    @ionic/app-scripts : 2.1.4
    Cordova Platforms  : ios 4.4.0
    Ionic Framework    : ionic-angular 3.6.1

System:

    ios-deploy : 1.9.2
    Node       : v7.7.1
    npm        : 4.1.2
    OS         : macOS Sierra
    Xcode      : Xcode 9.0 Build version 9A235

【问题讨论】:

    标签: javascript angularjs ionic-framework ionic3


    【解决方案1】:

    来自loading controller doc

    请注意,组件关闭后,将不再可用,必须创建另一个组件。这可以通过将组件的创建和表示包装在可重用函数中来避免,如下面的使用部分所示。

    所以你的错误是因为你有创建和当前拆分。

    import { LoadingController } from 'ionic-angular';
    
    constructor(public loadingCtrl: LoadingController) { }
    
    presentLoadingDefault() {
      const loading = this.loadingCtrl.create({
        content: 'Please wait...'
      });
    
      loading.present();
    
      setTimeout(() => {
        loading.dismiss();
      }, 5000);
    }
    

    【讨论】:

    • 谢谢你,我会试一试,看起来它应该可以工作。我唯一的评论是即使在 Ajax 调用之后也能工作?所以当通话结束时,我可以调用 loading.dismiss() 而不必等待默认的 5000?
    • 以 5000 为例,一旦你的调用完成,你应该订阅 observable 返回或 promise(如果你使用 promise)并调用它的dismiss。
    • 抱歉,我不明白 5000 是怎么回事,例如,我在 http 调用中使用了 promise。 this.presentLoadingDefault(); this.getDebt().then((res) => { this.data = res; this.customers = this.data.data; this.loading.dismiss(); }, (err) => { console.log(错误);});
    • 我有点想避免在我的控制器上的每个函数中创建 const 加载
    • 5000 只是一个计时器,一旦该时间过去了,就会调用dismiss。在你的情况下,在 presentLoadingDefault() 中的存在之后,一旦你完成了所有的逻辑,就把你的 http 请求放在'then' 中
    猜你喜欢
    • 2021-03-31
    • 2017-05-15
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多