Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何忽略Ionic/Firebase中的空字段?_Javascript_Firebase_Ionic Framework_Firebase Realtime Database - Fatal编程技术网

Javascript 如何忽略Ionic/Firebase中的空字段?

Javascript 如何忽略Ionic/Firebase中的空字段?,javascript,firebase,ionic-framework,firebase-realtime-database,Javascript,Firebase,Ionic Framework,Firebase Realtime Database,我有一个功能,用户可以改变他自己的详细信息,如他的描述或社会联系等帐户 但是,当我提交表单时,它会替换所有内容,空值只会删除数据库中的字段 是否可以提交表单并仅替换字段中输入的值,而忽略空值 这是我的控制器: var database = firebase.database(); var userId = firebase.auth().currentUser.uid; var nameInput = document.querySelector('#name'); var desc

我有一个功能,用户可以改变他自己的详细信息,如他的描述或社会联系等帐户

但是,当我提交表单时,它会替换所有内容,空值只会删除数据库中的字段

是否可以提交表单并仅替换字段中输入的值,而忽略空值

这是我的控制器:

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");
        });
    }

  });

对于像我这样的新手来说,我找到了一个解决方案:自动完成已经有值的字段,这样当我提交表单时,它会以相同的值再次保存

守则:

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;

  });;

您好,谢谢,在执行此操作时,如果我将“name”字段留空,并且其中已经有一些数据,下面是它返回的错误:
Uncaught error:Firebase.set失败:第一个参数在属性“accounts.lqxPFkBMpka6NnWkNEtrW1leHk32.name”中包含未定义的内容“
有什么想法吗?如果有数据,可能只需要发送密钥,那么尝试类似的操作。如果加载用户数据并在页面加载时用旧值填充字段,会怎么样?这样,如果用户不编辑任何内容,旧值将再次保存,因此不会发生任何更改。这正是我所做的!我用几句话来回答我自己的问题:)
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;

  });;