2015-05-12 184 views
1

我试图更新Firebase中我的services项目的所有子项的“名称”,以删除所有前导和尾随空格。我使用正则表达式来实现这一点,但我似乎无法弄清楚为什么它不起作用。Firebase儿童的更新值

我在快照中使用.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(); 
    }); 
}); 

任何帮助表示赞赏。提前致谢!

回答

0

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

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

希望这可以帮助别人。

+1

嗨realph。这被认为是AngularFire的反模式 - 查看[这个答案](http://stackoverflow.com/a/29835485/1526037)上的评论。正如@FrankvanPuffelen所说:“如果你在'$ firebaseObject'(或$ firebaseArray')之后直接使用'$ loaded()',那么你可能做错了一些事情。”“ –

+0

有用。我只是用它来进行一些调试以从一些字符串中删除一些空白区域。这就是说,如果我想在生产中做类似的事情,那么最好的方法是做什么? – realph

+1

您可以在初始插入/更新时修复它,而不是每次获取列表。 –

0

你错过item.name.replace代替name.replace的:

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

我得到这个错误:'e.name.replace不是一个函数'。值得一提的是,我正在使用browserify来捆绑我的JS。 – realph