【问题标题】:How to update ion-toggle status real in time?如何实时更新离子切换状态?
【发布时间】:2018-03-13 00:38:15
【问题描述】:

我的应用程序中有一个 ion toggle 将他的状态存储在 firebase 数据库中,有没有办法使用从 firebase 加载的数据更改他的状态?

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

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

status() 返回一个布尔值。

但是由于 firebase 的异步功能,视图在 status() 中的值之前加载第一个。到目前为止找不到这个问题的解决方案,我会感谢任何帮助。

【问题讨论】:

    标签: ionic-framework ionic2


    【解决方案1】:

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

    执行此操作的一个好方法是将 Firebase 结果存储在一个变量中。进入de页时可以这样做:

    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.
    }
    

    希望这会有所帮助。

    【讨论】:

    • 哇,非常感谢,它确实有效!我不敢相信解决方案这么简单!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多