2017-02-15 42 views
0

我有一个功能,用户能够改变自己的详细信息,如他的描述或社交链接等他的帐户...如何忽略Ionic/Firebase中的空字段?

但是,当我提交表单时,它将替换所有内容和空值擦除数据库中的字段。

任何方式提交表格,并只取代在该字段中输入的值,并忽略空的?

这里是我的控制器:

var database = firebase.database(); 
    var userId = firebase.auth().currentUser.uid; 
    var nameInput = document.querySelector('#name'); 
    var descriptionInput = document.querySelector('#description'); 
    var cityInput = document.querySelector('#city'); 
    var ageInput = document.querySelector('#age'); 
    var hobbiesInput = document.querySelector('#hobbies'); 
    var facebookInput = document.querySelector('#facebook'); 
    var twitterInput = document.querySelector('#twitter'); 
    var instagramInput = document.querySelector('#instagram'); 
    var youtubeInput = document.querySelector('#youtube'); 
    var snapchatInput = document.querySelector('#snapchat'); 
    var linkedinInput = document.querySelector('#linkedin'); 
    var emailInput = document.querySelector('#email'); 
    var passwordInput = document.querySelector('#password'); 
    var saveButton = document.querySelector('#save'); 



    saveButton.addEventListener("click", function() { 
     var name = nameInput.value; 
     var description = descriptionInput.value; 
     var city = cityInput.value; 
     var age = ageInput.value; 
     var hobbies = hobbiesInput.value; 
     var facebook = facebookInput.value; 
     var twitter = twitterInput.value; 
     var instagram = instagramInput.value; 
     var youtube = youtubeInput.value; 
     var snapchat = snapchatInput.value; 
     var linkedin = linkedinInput.value; 
     var email = emailInput.value; 
     var password = passwordInput.value; 


     firebase.database().ref('accounts/' + userId).set({ 
      name: name, 
      description: description, 
      city: city, 
      age: age, 
      hobbies: hobbies, 
      facebook: facebook, 
      twitter: twitter, 
      instagram: instagram, 
      youtube: youtube, 
      snapchat: snapchat, 
      linkedin: linkedin, 
      email: email, 
      password: password, 

     }); 

     receiveNewData(); 
    function receiveNewData() { 
     // check if there's new data added 
     firebase.database().ref('accounts/' + userId).on('child_added', function(msg) { 
      var data = msg.val(); 
      // your new data 
      console.log(data); 
      $state.go("tab.account"); 
     }); 
    } 

    }); 
+1

如果您加载用户数据,并在页面加载旧值满山遍野什么?这样,如果用户不编辑任何内容,旧值将再次保存,因此没有任何更改。 – ppajer

+0

这正是我所做的!我正在回答我自己的问题:) – FrenchyNYC

回答

0

对于人来说,像我这样的,是新的这一点,这里是我找到了解决方法:自动完成有一个值已经所以当领域我用相同的值再次提交表单。

代码:

var database = firebase.database(); 
    var userId = firebase.auth().currentUser.uid; 
    var nameInput = document.querySelector('#name'); 
    var descriptionInput = document.querySelector('#description'); 
    var cityInput = document.querySelector('#city'); 
    var ageInput = document.querySelector('#age'); 
    var hobbiesInput = document.querySelector('#hobbies'); 
    var facebookInput = document.querySelector('#facebook'); 
    var twitterInput = document.querySelector('#twitter'); 
    var instagramInput = document.querySelector('#instagram'); 
    var youtubeInput = document.querySelector('#youtube'); 
    var snapchatInput = document.querySelector('#snapchat'); 
    var linkedinInput = document.querySelector('#linkedin'); 
    var emailInput = document.querySelector('#email'); 
    var passwordInput = document.querySelector('#password'); 
    var saveButton = document.querySelector('#save'); 
    var database = firebase.database().ref('/accounts/' + userId); 

// Retrieve information into the fields already filled in Database 
    database.on('value', function(snapshot) { 
    var displayName = snapshot.val().name; 
     var description = snapshot.val().description; 
     var displayCity = snapshot.val().city; 
     var displayAge = snapshot.val().age; 
     var displayHobbies = snapshot.val().hobbies; 
     var displayFacebook = snapshot.val().facebook; 
     var displayTwitter = snapshot.val().twitter; 
     var displayInstagram = snapshot.val().instagram; 
     var displayYoutube = snapshot.val().youtube; 
     var displaySnapchat = snapshot.val().snapchat; 
     var displayLinkedin = snapshot.val().linkedin; 
     var displayEmail = snapshot.val().email; 
     var displayPassword = snapshot.val().password; 
     $scope.$apply(function() { 
      $scope.displayName = displayName; 
      $scope.description = description; 
      $scope.displayCity = displayCity; 
      $scope.displayAge = displayAge; 
      $scope.displayHobbies = displayHobbies; 
      $scope.displayFacebook = displayFacebook; 
      $scope.displayTwitter = displayTwitter; 
      $scope.displayInstagram = displayInstagram; 
      $scope.displayYoutube = displayYoutube; 
      $scope.displaySnapchat = displaySnapchat; 
      $scope.displayLinkedin = displayLinkedin; 
      $scope.displayEmail = displayEmail; 
      $scope.displayPassword = displayPassword; 
     }); 
     document.getElementById("name").value = displayName; 
     document.getElementById("description").value = description; 
     document.getElementById("city").value = displayCity; 
     document.getElementById("age").value = displayAge; 
     document.getElementById("hobbies").value = displayHobbies; 
     document.getElementById("facebook").value = displayFacebook; 
     document.getElementById("twitter").value = displayTwitter; 
     document.getElementById("instagram").value = displayInstagram; 
     document.getElementById("youtube").value = displayYoutube; 
     document.getElementById("snapchat").value = displaySnapchat; 
     document.getElementById("linkedin").value = displayLinkedin; 
     document.getElementById("email").value = displayEmail; 
     document.getElementById("password").value = displayPassword; 

    });; 
0
var firebase_data = {}; 
var userID = firebase.auth().currentUser.uid; 

var input_data = { 
    nameInput: document.querySelector('#name'), 
    descriptionInput: document.querySelector('#description'), 
    cityInput: document.querySelector('#city'), 
    ageInput: document.querySelector('#age'), 
    hobbiesInput: document.querySelector('#hobbies'), 
    facebookInput: document.querySelector('#facebook'), 
    twitterInput: document.querySelector('#twitter'), 
    instagramInput: document.querySelector('#instagram'), 
    youtubeInput: document.querySelector('#youtube'), 
    snapchatInput: document.querySelector('#snapchat'), 
    linkedinInput: document.querySelector('#linkedin'), 
    emailInput: document.querySelector('#email'), 
    passwordInput: document.querySelector('#password'), 
    saveButton: document.querySelector('#save') 
} 

for(var key in input_data) { 
    if(input_data.hasOwnProperty(key) && input_data[key].value.length) { 
     firebase_data[key] = input_data[key].value 
    } 
} 

firebase.database().ref('accounts/' + userId).set(firebase_data)  
+0

你好,谢谢你,当我这样做时,如果我把字段“name”留空并且里面已经有一些数据,这里是它返回的错误:'Uncaught Error: Firebase.set失败:第一个参数包含属性'accounts.lqxPFkBMpka6NnWkNEtrW1leHk32.name'中的未定义任何想法? – FrenchyNYC

+0

可能只需要发送密钥,如果有数据,请尝试这样的事情 – zlwaterfield