2017-01-22 100 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。 –