如何及时更新离子切换状态?

时间:2017-10-01 21:27:52

标签: ionic-framework ionic2

我的应用程序中有一个离子切换,用于将其状态存储在firebase数据库中,有没有办法使用从firebase加载的数据来更改其状态?

例如,如果在数据库中状态为true,那么当我加载视图时,切换将打开。我尝试过使用check:

<ion-toggle checked="status()" >

其中status()返回一个布尔值。

但是由于firebase的异步功能,视图在status()中的值之前加载1st。到目前为止无法找到解决这个问题的方法,我会给予任何帮助。

1 个答案:

答案 0 :(得分:1)

是的,有一种方法可以做到这一点,但在属性中使用函数并不好。当在DOM中使用返回值的函数时,每当DOM发生变化时,您都会执行该函数,因此,这是一个在Firebase上获取内容的函数,您将使您的用户每次更新DOM时都会向Firebase发出请求。

执行此操作的好方法是将Firebase结果存储在变量中。当你输入de page时,你可以这样做:

public myStatus: boolean;

// USING A LIFECYCLE HOOK
ionViewWillLoad(){
  firebase.database().ref(`Path/To/Your/Status`).once('value', snapshot => {
    this.myStatus = snapshot.val();
  });
}

并在您的HTML中

<ion-toggle [checked]="myStatus">
<!-- You need to bind your checked attribute to myStatus, using checked="{{myStatus}}" also works -->

如果您需要始终检查您的状态是否已更改,您还可以在firebase上创建和观察,因此如果状态发生变化,您可以更改切换:

ionViewWillLoad(){
  firebase.database().ref(`Path/To/Your/Status`).once('value', snapshot => {
    this.myStatus = snapshot.val();
  });
  firebase.database().ref(`Path/To/Your/Status`).on('child_changed', snapshot => {
    this.myStatus = snapshot.val();
  });

  // YOU'LL NEED BOTH SINCE THE FIRST LOADS THE STATUS FOR THE FIRST TIME AND THE SECCOND CREATES AN OBSERVABLE FOR WHEN THE STATUS CHANGE.
}

希望这有帮助。