在阅读有关发布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()
再次使用。
所以我有两个问题:
另一方面,我正在寻找 Apollo 作为替代方案。我还没有真正尝试过,但如果我知道我在做什么,你们会推荐它用于生产吗?
答案 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...
虽然我仍然感兴趣,如果我可以关闭订阅然后再打开它。