一般来说,如果你想停止订阅,你可以使用 Meteor.stop() 来完成。从指南中,关于如何停止订阅:
如果您在响应式上下文(例如自动运行或 React 中的 getMeteorData)或通过 Blaze 组件中的 this.subscribe() 有条件地调用 Meteor.subscribe(),则 Meteor 的响应式系统将自动为您调用 this.stop()在适当的时候。
所以通常你不必停止订阅。它是自动完成的。
-对于您的第一个问题,是的,取决于应用程序,它可能会占用大量 CPU,这就是为什么您要避免在聊天应用程序中出现多个 pub/sub,例如。
-对于第二个问题,在您的情况下,您需要做的是模板级别的订阅而不是路由器级别,以便将您需要的数据仅提供给您需要的模板。请参阅此示例以了解如何使用 Flow Router 执行此操作,这同样适用于其他路由器。
Template.blogPost.onCreated(function() {
var self = this;
self.autorun(function() {
var postId = FlowRouter.getParam('postId');
self.subscribe('singlePost', postId);
});
});