[英]Firebase database keys beginning with underscore removed
我開始編寫一個Web應用程序,並且該用戶對象具有_username
鍵,因此其開頭是。
如果我將對象添加到Firebase數據庫中,則不存在-其他所有內容都在其中。
為什么這個鍵/值對不在數據庫中? 我的意思是它是有效的JSON,不是嗎?
我的意思是,除了重命名外,還有其他解決方案嗎?
我的被推送到數組的對象具有以下結構:
{
_username:"",
history:[],
// ...
}
我的代碼:
var users = $firebaseArray(ref.child("user"));
// adding user
users.$add($scope.session.user);
// logging afterwards - also no '_username'
// logging on init
users.$loaded().then(function (data) {
$log.debug(data);
});
除下划線變量外,所有內容均已存儲。
看起來像$add()
(或更具體地說$firebaseUtils.toJSON()
)放置屬性,其名稱以_
開頭。 一種快速的查看方法是:
console.log($firebaseUtils.toJSON(user));
一種解決方法是通過JavaScript SDK將用戶對象直接寫入數據庫:
ref.child("user").push(user);
這確實會使用有效的鍵名來寫入所有屬性,包括以_
開頭的鍵名。
由於AngularFire是基於同一JavaScript SDK構建的,因此它將立即獲取更改。
jsbin中的演示: http ://jsbin.com/lobadej/edit?js,控制台
這是一項設計決定,基於以下事實:聲明私有變量的通用JavaScript約定是在它們前面加上_
。
關於為什么它與默認SDK行為不同的上下文,請記住AngularFire正在創建可擴展的類實例,並提供客戶端功能(不僅僅是用於數據傳輸的原始JSON對象)。 因此,我們的目標是使擴展和使用$ firebaseArray和$ firebaseObject盡可能簡單明了,並使保存和服務器同步盡可能透明。
為此,您需要一個簡單的約定將“本地”或私有內容與要發送到服務器的內容分開。 由於$在技術上是Angular庫保留的,因此_
繼續是在ES6之前為私有變量和方法添加前綴的合適方法。
我們可以重新考慮一下是否有很多人在這里遇到問題,但是考慮到這種方式已經實施了將近3年,並且這是對此的第一條評論,我認為這樣還可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.