2017-01-22 95 views
1

我正在嘗試訂閱包含額外動態團隊的用戶團隊列表。最後一個的ID通過參數傳遞給訂閱,這樣的:流星,動態訂閱參數

MeteorObservable.subscribe('user.teams', extraTeamId).subscribe(() => { 
    this.findUserTeams(); 
}); 

的extraTeamId VAR是不斷變化的對我的服務組件,而我每次都要有這個充滿活力的團隊對我的客戶收集這var變化。

我的第一個問題是:如果我在組件上更改了此變量的值,發佈是否應該接收到這個新值,或者它從未在服務器上更新過?

如果流星不應該這樣工作,還有其他不錯的選擇嗎?

我也使用Angular2。

+0

查找反應性改變部分](https://angular-meteor.com/tutorials/socially/angular2/search-sort-pagination-and-reactive-vars),我認爲它會符合你的需求 – Khang

+0

謝謝你,我沒有看到這個實現之前,但我喜歡!也許我會嘗試一個更簡單的版本。 –

回答

1

如果你想獲得新的價值,那麼你必須取消訂閱上次訂閱,並再次訂閱新值。你可以在角2流星中這樣做。

在服務器端發佈

if (Meteor.isServer) { 
    Meteor.publish('user.teams', function(option : string) { 
       console.log(option); // you will get your dynamic param value in option 
       return findUserTeams.find({"team": option}); // apply your query here 
     }); 
    } 

,並在客戶端,你可以做這樣的事情。

 userteamdata: Observable <any[]> ; 
    userteamSub: Subscription; 

     this.userteamSub = MeteorObservable.subscribe('user.teams', extraTeamId).subscribe(() => { 
    this.userteamdata = findUserTeam.find({}).zone(); 
    }); 
現在

當你extraTeamId值的變化則可以檢測到變化 ,做這樣的事情

valuechangefunction(){ 

    if (this.userteamSub) { 
      this.userteamSub.unsubscribe(); 
      } 
     this.userteamSub = MeteorObservable.subscribe('user.teams', extraTeamId).subscribe(() => { 
      this.userteamdata = findUserTeam.find({}).zone(); 
      }); 
} 

我希望這將有助於在這個[鏈接:)

+0

這很好,我試圖避免這個(取消訂閱和再次訂閱),但我認爲這是必要的。 我正在考慮使用2個訂閱,一個與用戶團隊(可能有很多),並保持訂閱活着。這樣可以避免將收集數據移除並重新發送到客戶端的開銷。 而另一個訂閱只針對額外的團隊,這個訂閱將在每次更改時取消訂閱和重新訂閱。你怎麼看? –

+0

@HenriqueRotava我認爲你的問題還有一個解決方案,而不是2個訂閱,你可以將所有的團隊添加到一個數組中,並且onchange添加動態ID到這個數組中,並在mongdb查詢中使用$進行搜索。從服務器端發佈所有團隊。這裏是您需要的mondb查詢的鏈接。 http://stackoverflow.com/questions/8145523/mongodb-find-by-multiple-array-items。 –