【问题标题】:Data not updating in Firebase and IonicFirebase 和 Ionic 中的数据未更新
【发布时间】:2017-02-15 14:58:30
【问题描述】:

我是 Ionic / Firebase 的新手,我尝试通过表单更新字段。一切正常,没有错误,所有控制台日志都显示了需要的内容,但数据库中的数据没有更新。

这是我的控制器:

 var database = firebase.database();
  var userId = firebase.auth().currentUser.uid;
  var nameInput = document.querySelector('#name');
  var descriptionInput = document.querySelector('#description');
  var saveButton = document.querySelector('#save');

  saveButton.addEventListener("click", function() {
    var name = nameInput.value;
    var description = descriptionInput.value;

    function writeUserData(name, description) {
      firebase.database().ref('accounts/' + userId).set({
        name: name,
        description: description,
      });
    }
    $state.go("tab.account");
  });

有什么想法吗?或者也许是一种更好的方法,可以在用户登录时通过表单简单地更新 firebase 的数据库?

【问题讨论】:

  • 这个writeUserData函数真的被执行了吗?看来你只是声明了它

标签: javascript firebase ionic-framework firebase-realtime-database


【解决方案1】:

似乎你还没有真正了解函数的真正意义/用途以及何时使用它

这是因为你将它包裹在 writeUserData 中,而你没有事件执行/调用这个函数

在这种情况下也不需要函数writeUserData

所以删除它的功能

var database = firebase.database();
var userId = firebase.auth().currentUser.uid;
var nameInput = document.querySelector('#name');
var descriptionInput = document.querySelector('#description');
var saveButton = document.querySelector('#save');

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

saveButton.addEventListener("click", function() {
    var name = nameInput.value;
    var description = descriptionInput.value;

    firebase.database().ref('accounts/' + userId).set({
        name: name,
        description: description,
    });
});

您只需将$state.go("tab.account"); 转至receiveNewData

已编辑

为了能够捕捉到更改,只需调用 add child_added 事件侦听器 inside 'accounts/' + userId

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

【讨论】:

  • 哇!谢谢 !我简直不敢相信!现在,当它转到“tab.account”时,没有显示更改,我必须注销并再次登录才能看到它。有什么想法吗?
  • 谢谢你,但它似乎不起作用。一个错字还是什么?我的意思是它会保存等,但它不会通过转到其他页面来显示。
  • 我有这个错误:TypeError: firebase.database(...).ref.child is not a function 所以我们摆脱了返回“tab.account”的动作?再次感谢您的宝贵时间,您不知道我对此感到多么沮丧...
  • 这次没有错误,但仍然没有改变数据。现在我看到了,如果我单击其他选项卡并返回 tab.account 我仍然看不到它发生变化(即使它已在数据库中更改)。也许我在访问页面本身时需要一些东西来刷新数据?
  • 我忘了在child_added 事件监听器中包含$state.go("tab.account"); hehehe
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
相关资源
最近更新 更多