2016-04-03 23 views
0

我不知道如果我正確標題爲我的問題,但這裏是我想達到什麼我迄今(簡體儘可能):如何在MongoDB遊標屬性更改時觸發函數? (角流星)

我有什麼至今:

對於我創建了一個 「訪客」 對象每個訪問者:

{ 
    name:"Bob", 
    mouseX:"31", // The mouseposition is constantly updated 
    mouseY:"400", 
    messages:[ 
    {text:"Message Text",prop:"other property"}, 
    {text:"Another Message"} 
    ] 
} 

之後,我的對象綁定到範圍:

$scope.helpers({ 
    visitor:() => Visitors.findOne({"_id":id}) 
}); 

消息顯示一個NG重複在visitor.messages模型內部:

<div ng-repeat="msg in visitor.messages"> 
    <span class="text {{msg.class}}"> {{msg.text}} </span> 
</div> 

一位來訪者可以發送一個新的消息有:

Visitors.update(
{_id: visitor._id}, 
    {$push: {messages: {"text":"New Message"}}} 
); 

我想做

什麼

當Bob收到一條新消息時,我想要觸發該功能newMessageArrived()併爲新消息設置動畫。

的問題,什麼我想到目前爲止

首先,我試圖用角:角動畫包裝和動畫的CSS類,但新的消息NG輸入觸發每次遊客全部消息。 mouseX已被更新,即使Visitors-Object中的消息沒有被推送,仍然只爲新消息觸發所有消息。

那好吧,因爲我猜想當訪客對象改變時,整個DOM被重建。現在,我想簡單地看支撐的遊客,對象像消息:

scope.$watch("visitor.messages", function (newValue, oldValue) { 
    newMessageArrived() 
}); 

再次newMessageArrived()與每個更新到遊客-對象觸發。當然,我可以用類似於檢查消息數組的長度來捕捉這個愚蠢的東西,但在我的理解中,即使使用$ watch也沒有錯。

問題

那麼,什麼是對的變化在MongoDB的光標(對象)的屬性反應的角流星呢?

請考慮我的例子極其簡化,以專注於我的問題,但我也是流星的新手,甚至在Angular中都沒有經驗。此外,這是一個「概念證明」項目,不適用於任何商業或專業環境,因此安全性,性能和可維護性沒有平常那麼重要。

感謝您的時間,並希望有任何幫助

回答

0

我找到了一個解決方案,我猜。

從角流星Uringo在另一個類似question解釋在Github上:

@gooor這是流星的如何自動運行工作。它會在每個變化 上執行其中的任何反應性事物,而流星光標是一個反應性對象。如果你想重新運行的東西,只有當字段改變 可以使用角的$表:

$scope.$watch('field', function(){ console.log('calling'); 
this.foos = Foos.find({field: this.field}); }); 

在我的具體情況我需要添加true作爲第三個參數$watch功能。因此只有在messages屬性更改時才調用newMessageArrived()

所以我最初的擔心在哪裏錯了,但是當有人有更好的,更流浪的解決方案時,我將不勝感激。

相關問題