2

Firebase에서 항목의 스냅 샷을 가져와 나중에 경로에서 사용할 수 있도록해야합니다. Null 값이 입력되지 않도록하는 유효성 검사가 있습니다. 이 스냅 샷을 사용하기 전에 유효성 검사가 정상적으로 작동했습니다. 그러나이 스냅 샷을 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

제거하여 : ionViewDidLoad()에서

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

여기

은 타이프 라이터입니다.

관련 문제