2016-07-16 139 views
0

阅读有关发布REST资源并停止订阅的文档后,我就能够编写这样的事:如何在停止订阅流星后重新订阅?

(使用角流星)

发布:

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' ] 

它在首页加载时运行良好。然而,我注意到,当我只问阿尔法布拉沃,并查理上刷新,三角洲回声狐步仍停留在Minimongo缓存。

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

所以我有两个问题:

  1. 如何停止订阅后重新订阅?
  2. 有没有其他方法可以再次订阅?

另一方面,我正在寻找阿波罗作为替代。我还没有真正尝试过,但是如果我知道我在做什么,我们会推荐它用于制作吗?

回答

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... 

虽然我仍然有兴趣,如果我能关掉订阅,然后再次打开它。

+0

我相信你应该在发布之后清除退订(使用回调)。就像你在创建订阅时调用'this.added'一样,当它停止时(在服务器上),你应该完成'this.removed'。这是手动完成的成本。 – MasterAM