我正在用Firebase構建Angular中的應用程序,其中一方面是一對一聊天。我正在查詢Firebase,看看當前正在訪問應用程序的用戶和他們正在嘗試聊天的用戶之間是否已經存在聊天室。如果存在,我試圖將該房間作爲選定的房間應用於該範圍。我正在使用「消息」服務來運行查詢。在angularjs中觀看Firebase查詢
this.roomQuery = function(user1ID, user2ID) {
roomsRef.orderByChild("user1").equalTo(user1ID).on("child_added", function(snapshot) {
if (snapshot.val().user2 == user2ID) {
self.selectedRoom = snapshot.key();
console.log(self.selectedRoom);
} else {
self.selectedRoom = null;
}
})
}
,並在我的控制,我使用:
$scope.$watch(
function(){ return Messages.selectedRoom },
function(newValue, oldValue) {
$scope.selectedRoom = newValue;
}
)
這$scope.$watch
方法很適合我用一切,似乎在這種情況下有時工作。控制檯日誌總是輸出Messages.selectedRoom的正確值,但$ scope.selectedRoom有時不會更新。有什麼想法發生在這裏?我很困惑。如果它正確地登錄到控制檯,它不應該在範圍中更新嗎?
我認爲這與異步加載的Firebase數據有關,但我不明白爲什麼Messages.selectedRoom會在服務中更新,而不是由於手錶而在範圍內。我應該以某種方式使用'$ loaded'嗎? – cassiusclay
如果您總是希望同一個兩個用戶一起在同一個房間中結束,您還可以考慮將這個房間名稱放在這兩個用戶的uid上。這種方法的優點是不需要查詢來查找房間:相同的用戶會自動結束同一個房間。看到這個答案對這個概念的解釋:http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase/33547123#33547123。 –