我的应用程序中有一个离子切换,用于将其状态存储在firebase数据库中,有没有办法使用从firebase加载的数据来更改其状态?
例如,如果在数据库中状态为true,那么当我加载视图时,切换将打开。我尝试过使用check:
<ion-toggle checked="status()" >
其中status()返回一个布尔值。
但是由于firebase的异步功能,视图在status()中的值之前加载1st。到目前为止无法找到解决这个问题的方法,我会给予任何帮助。
答案 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.
}
希望这有帮助。