3

我有一个弹出窗口,它将我带到另一个页面,在那里我弹出回到根页面 (popToRoot),在事件中重新加载数据/dom,然后在 json 数据从服务器返回时关闭 promise 中的弹出窗口。如果我在解雇时有很大的超时时间,这一切都很好。

  dismissPopup() {
    if (this.popover) {
      let that = this;
      setTimeout(function () {
        that.popover.dismiss();
      }, 500);
    }
  }

如果我将超时设置得太低,比如 100 毫秒,它不会因为 dom 仍在加载而关闭。

但是,我认为超时可能不是最佳做法。如果有人的设计很慢,时间不够用怎么办?

任何人都可以提出任何建议吗?我应该检测dom何时加载,然后调用dismiss?如何检查 dom 是否已加载?

谢谢

4

2 回答 2

5

您可以使用Events而不是使用超时。通过这样做,您可以在数据从服务器返回(并且一切准备就绪)时发布和事件,并订阅该事件以了解何时需要关闭弹出窗口。

import { Events } from 'ionic-angular';

constructor(public events: Events) {}

// first page (publish an event when data is ready)
events.publish('loading:finished', data);

// second page (listen for the loading finished event)
events.subscribe('loading:finished', (eventData) => {
  // eventData is an array of parameters, so grab our first and only arg
  console.log('Data:', eventData[0]);
});
于 2016-08-26T21:33:56.720 回答
3

也可以通过调用 ViewController 上的 dismiss() 方法从弹出框的视图中解除弹出框

  constructor(public navParams:NavParams,public navCtrl:NavController,public viewController:ViewController) {
    console.log('Hello PopOverComponent Component');
  }
  blah()
  {
  //do something
    this.viewController.dismiss();
  }

于 2017-10-05T02:10:27.507 回答