【问题标题】:Meteor, dynamic subscription parametersMeteor,动态订阅参数
【发布时间】:2017-06-07 09:56:54
【问题描述】:

我正在尝试订阅一个用户团队列表,其中包括一个额外的动态团队。最后一个的id通过参数传递给订阅,像这样:

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

extraTeamId var 在我的服务组件上不断变化,每次这个 var 变化时,我都需要在我的客户端集合中拥有这个动态团队。

我的第一个问题是:如果我在组件上更改此变量的值,发布是否应该接收这个新值,或者它永远不会在服务器上更新?

如果 Meteor 不应该那样工作,还有其他好的选择吗?

我也在使用 Angular2。

【问题讨论】:

  • link 中查找响应式更改部分,我认为它会符合您的需要
  • 谢谢你,我以前没见过这个实现,但我喜欢!也许我会尝试一个更简单的版本。

标签: angular meteor publish-subscribe


【解决方案1】:

如果您想获得新价值,那么您必须取消订阅上次订阅并再次订阅新价值。你可以在 Angular 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();
          });
}

我希望这会有所帮助:)

【讨论】:

  • 很好,我试图避免这种情况(取消订阅并再次订阅),但我认为这是必要的。我正在考虑使用 2 个订阅,一个与用户团队(可能有很多)一起使用,并保持该订阅有效。这种方式将避免删除收集数据并将其重新发送给客户端的开销。另一个订阅仅适用于额外的团队,这个订阅将在每次更改时取消订阅并重新订阅。你怎么看?
  • @HenriqueRotava 我认为您的问题还有另一种解决方案,而不是 2 个订阅,您可以将所有团队添加到一个数组中,onchange 也将动态 id 添加到此数组中,并使用 $in mongdb 查询进行搜索.从服务器端发布所有团队。这是您需要的 mondb 查询的链接。 stackoverflow.com/questions/8145523/….
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多