【问题标题】:Update Value of Firebase Children更新 Firebase 子项的值
【发布时间】:2015-05-12 16:18:47
【问题描述】:

我正在尝试在 Firebase 中更新我的 services 项目的所有子项的“名称”,以删除所有前导和尾随空格。我正在使用正则表达式来执行此操作,但我似乎无法弄清楚它为什么不起作用。

我在其快照上使用 .forEach 循环遍历我的 services 项目,但它似乎没有将新值保存到 Firebase。

这是因为我应该在 $firebaseObject 上使用 $save 吗?

这是我的代码的样子:

var servicesRef = ref.child('services');

servicesRef.on('value', function(snap) {
  snap.forEach(function(serviceSnap) {
    var item = serviceSnap;
    item.name = name.replace(/^\s+|\s+$/g,'');
    item.$save();
  });
});

感谢任何帮助。提前致谢!

【问题讨论】:

    标签: regex firebase angularfire


    【解决方案1】:

    您缺少 item.name.replace 而不是 name.replace:

    var item = serviceSnap;
    item.name = item.name.replace(/^\s+|\s+$/g,'');
    item.$save();
    

    【讨论】:

    • 我收到此错误:e.name.replace is not a function。值得一提的是,我正在使用 browserify 来捆绑我的 JS。
    【解决方案2】:

    原来我只能在 $firebaseObject 上使用 AngularFire 的 $save() 方法,所以我使用了不同的技术:

    var obj = $firebaseObject(servicesRef);
    
    obj.$loaded().then(function() {
       angular.forEach(obj, function(value, key) {
          var singleServiceRef = servicesRef.child(key);
          var serviceObj = $firebaseObject(singleServiceRef);
          var name = value.name;
          name = name.replace(/^\s+|\s+$/g,'');
          serviceObj.name = name;
          serviceObj.$save();
       });
     });
    

    希望这对其他人有所帮助。

    【讨论】:

    • 嗨,realph。这被认为是 AngularFire 的反模式 - 查看 this answer 上的 cmets。正如@FrankvanPuffelen 所说,“如果你在$firebaseObject(或$firebaseArray)之后直接使用$loaded(),你可能做错了什么。
    • 很高兴知道。我只是将它用于一些调试,以从某些字符串中删除一些空格。也就是说,如果我想在生产中做类似的事情,最好的方法是什么?
    • 您会在初始插入/更新时修复它,而不是每次获得列表时。
    • 啊,假设我们有一个 create() 函数,我会在函数内的该字符串上运行该正则表达式,然后再将其保存到 Firebase?
    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多