2

Firebaseのアイテムのスナップショットを取得して、後でそのパスで使用できるようにする必要があります。ヌル値が入力されないようにするための検証があります。このスナップショットを使用する前に、私の検証はうまくいきました。しかし、このスナップショットをionViewDidLoadとコンストラクタに入れると、ページが最初にロードされたときにバリデーションが発生し、サブミットの試行も正しく行われます。この問題を解決するにはどうすればよいですか?ここでFirebaseスナップショットを取得すると、検証エラーが発生する

は活字体である:

export class CustomItemPage { 

    user: {}; 
    items: FirebaseListObservable<any[]>; 
    customitemname: string = ''; 
    customitemcat: string = ''; 
    listKey = ""; 

ionViewDidLoad(){ 
    firebase.auth().onAuthStateChanged((user)=> { 
    this.user = user; 
    console.log('authStateINVITE',user); 
    if (user) { 
     // User is signed in. 
     var displayName = user.displayName; 
     var email = user.email; 
     var emailVerified = user.emailVerified; 
     var photoURL = user.photoURL; 
     var isAnonymous = user.isAnonymous; 
     var uid = user.uid; 
     var providerData = user.providerData; 
     // this.navCtrl.setRoot(TutorialPage); 
     // ... 
    } else { 
     // User is signed out. 
     // ... 
    } 
    }); 

    var user = firebase.auth().currentUser; 
    var uid = user.uid; 

    firebase.database().ref('/userprofile/' + uid + '/' + 'list').once('value').then((snapshot)=> { 
    var listkey = (snapshot.val()); 
    console.log(listkey) 
    this.listKey = listkey; 
    this.addcustomitem();//, listkey); 
    }); 

} 

    constructor(public navCtrl: NavController, private afAuth: AngularFireAuth, public af: AngularFireDatabase, public alerCtrl: AlertController, private toastCtrl: ToastController) { 
    this.items = af.list('/messages', { 
      query: { 
      limitToLast: 50 
      } 
     }); 

     //this.user = this.afAuth.authState; 
    } 

     logout() { 
      this.afAuth.auth.signOut(); 
      this.navCtrl.setRoot(SignInPage) 
     } 

     addcustomitem() { 
      var listkey = this.listKey; 
      var customitemname = this.customitemname; 
      var customitemcat = this.customitemcat 

      var customlistData = { 
       category: customitemcat, 
       foodname: customitemname, 
       state: "on", 
      }; 

      var user = firebase.auth().currentUser; 
      var uid = user.uid; 

      var foodid = firebase.database().ref().child('posts').push().key; 

      if (customitemname==null || customitemname=="") 
       { 
       let alert = this.alerCtrl.create({ 
         title: 'Error!', 
         message: 'Please enter a name for your item.', 
         buttons: ['Ok'] 
        }); 
        alert.present() 
        } 
      else if (customitemcat==null || customitemcat=="") 
       { 
       let alert = this.alerCtrl.create({ 
         title: 'Error!', 
         message: 'Please enter a category for your item.', 
         buttons: ['Ok'] 
        }); 
        alert.present() 
        } 
      else{ 
       this.navCtrl.pop(); //SENDS TO PREVIOUS PAGE 

       let toast = this.toastCtrl.create({ 
        message: customitemname + ' was added successfully', 
        duration: 3000, 
        position: 'bottom' 
       }); 

       toast.onDidDismiss(() => { 
        console.log('Dismissed toast'); 
       }); 

       toast.present(); 

       return firebase.database().ref('userlists' + '/' + listkey + '/' + 'list' + '/' + foodid).update(customlistData); 
       } 
     } 

} 

答えて

0

私は削除することによってこの問題を解決することができました:

this.addcustomitem();//, listkey); 

ionViewDidLoad()から。

関連する問題