停止在Meteor中订阅后如何重新订阅?

时间:2016-07-16 00:34:06

标签: meteor angular-meteor

在阅读有关发布REST资源和停止订阅的文档后,我能够编写如下代码:

(使用Angular-Meteor)

发布:

Meteor.publish('numbers', function(token){

   const res = HTTP.get(API, { headers: {'token-header': token }});

   _.forEach(res.data, (value, key) => {
      this.added('numbers', key, { name: value });
   });

   this.ready();
});

订阅:

class Ctrl{
   constructor($scope, $reactive, $localStorage){
      'ngInject';
      $reactive(this).attach($scope);

      this.subscriber = this.subscribe('numbers', () => {
         return [$localStorage.token];
      });

      this.helpers(){ numbers(){ return Numbers.find(); }}
   }

   refresh(){
      this.subscriber = this.subscribe('numbers', () => {
         return [$localStorage.token];
      }, {
         onReady: () => { console.log('stopping refresh animation'); }
      });
   }
}

//more Angular code...

假设这些是API返回的值:

[ 'Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot' ]

这一切都适用于首页加载。但是,我注意到当我只刷新 Alpha Bravo 查理时, Delta Echo Foxtrot 仍然保留在Minimongo缓存中。

我尝试在刷新功能中添加subscriber.stop()以从缓存中删除数据,但我无法让this.subscribe()再次使用。

所以我有两个问题:

  1. 停止订阅后如何再次订阅?
  2. 除了再次订阅之外还有其他方式吗?
  3. 另一方面,我正在寻找 Apollo 作为替代方案。我还没有真正尝试过,但如果我知道我在做什么,你们会推荐它用于生产吗?

1 个答案:

答案 0 :(得分:0)

嗯,我觉得很蠢。我正在思考这个问题。使用Meteor.apply()就足以满足我的需求。

以下是代码:

服务器

Meteor.methods({
   'retrieveNumbers' (token){
      const res = HTTP.get(API, { headers: {'token-header': token }});
      return res.data;
   }
});

客户端

class Ctrl{
   constructor($scope, $reactive, $localStorage){
      'ngInject';
      $reactive(this).attach($scope);
      this.$localStorage = $localStorage;

      this.retrieveNumbers();
   }

   retrieveNumbers(){
      this.apply('retrieveNumbers', [this.$localStorage.token], (err, res) => {
         this.numbers= res;
      });
   }
}

//more Angular code...

虽然我仍然感兴趣,如果我可以关闭订阅然后再打开它。