2017-03-04 50 views
0

我通過查詢用戶鑰數據庫中查找,如果相關物體存在:如何獲取angularFire2中關聯對象的Object鍵?

let url = ``/userMember/${userKey}``;

const userMemberRef = this.af.database.object(url, { preserveSnapshot: true }); 

userMemberRef.subscribe(data => { 
    if(data.val()!=null) { 
    console.log(data.val()); 
    memberKey= data.val(); 
    } 
}); 
return memberKey; 

它記錄了這臺這是很好的,因爲我想要的數據是存在的。

Object {-Ke2CyV2BJ5S3_7qcQj5: true}

但我怎麼能還給孩子鍵值 「-Ke2CyV2BJ5S3_7qcQj5」?

似乎很微不足道。我感謝您的幫助!

+0

在這裏,'subscribe'是異步的,所以你在返回'memberKey'之前就賦值了。請參閱http://stackoverflow.com/a/6847754/6680611 – cartant

+0

那麼獲得價值的解決方案是什麼?我認爲訂閱會解開它。我需要解包值,因爲它是消費方法所需要的。 – alltej

回答

1

data.val()實際上引用了userKey的值。由於userMember/${userKey}不是鍵值對的路徑,而是對象,因此userKey的「值」就是該對象。如果要將該對象的屬性的鍵分配給變量,則需要映射到該屬性的鍵。

由於假設您無法預測該密鑰的使用是否安全,因此就我所知,沒有一種簡單的方法可以做到這一點。從好的一面來看,有許多可以想象的方式來做到這一點。重要的是你瞭解上述情況。

事實上,您沒有直接的方式來訪問此密鑰,並且可能意味着您應該重新考慮您的型號的結構,如果可能的話

我會離開你的如何「讓在」關鍵這個例子中,主要是爲了說明其正在使用的路徑關係:

this.af.database.object(`userMember/${userKey}`) 
.subscribe(member => console.log(Object.keys(member)[0])); 
+0

我使用的語法是'console.log(Object.keys(member.val())[0]);' – alltej

+0

我假設你是因爲使用'preserveSnapshot'。你有沒有嘗試登錄鑰匙? –

1

只使用

const key = object['$key']; 
+0

BANG!你是老闆:D這是imho最優雅的解決方案 – Unispaw

相關問題