2015-05-12 182 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