0

我正在研究这个angular-meteor 教程第 12 步 ,我有一个问题

停止订阅主题

您可以使用“meteorSubscribe”使用 ctrl+f

那么关于该主题的关键句子是

原因是我们在 partyDetails 控制器内的同一个集合上调用了不同的订阅。

更正前的代码是

$scope.party = $meteor.object(Parties, $stateParams.partyId).subscribe('parties');
$scope.users = $meteor.collection(Meteor.users, false).subscribe('users');

然后修正后

$scope.party = $meteor.object(Parties, $stateParams.partyId);
$scope.users = $meteor.collection(Meteor.users, false).subscribe('users');
$scope.$meteorSubscribe('parties');

我尝试在更正代码之前运行,并且在 cmd 中没有显示任何内容(错误),但这只会导致错误的结果,如教程所说

如果您导航到派对详情页面然后返回,分页和搜索将停止工作。

然后我有两个问题

  1. 为什么cmd上没有错误显示?
  2. 为什么partyDetails 控制器的错误会影响partyList 控制器的搜索和分页?他们的关系是什么?
4

1 回答 1

2

编辑:如果您不取消订阅,那么如果您离开并再次返回,您最终将尝试两次订阅同一出版物,从而导致错误,因为流星中的订阅持续到您结束它们。

有两种方法可以摆脱 angular-meteor 的订阅。您可以为订阅分配一个句柄变量,然后在离开页面时停止它。二(推荐方式)是使用$scope.$meteorSubscribeinstead of,$meteor.subscribe()因为它设置为在作用域被销毁时自动移除订阅。

我看不到你所有的代码来确定你为什么会出现或没有出现你认为应该出现的错误,希望这能对教程中发生的事情有所了解。

最终的结果将是这样的:

$meteor.autorun($scope, function() {
    $meteor.subscribe('parties', {
        limit: parseInt($scope.perPage),
        skip: parseInt(($scope.page - 1) * $scope.perPage),
        sort: $scope.sort
    }).then(function() {
        $scope.partiesCount = $meteor.object(Counts, 'numberOfParties', false);
        $scope.parties = $meteor.collcetion(function() {
            return Parties.find({}, {
                sort: $scope.getReactively('sort');
            });
        });
    });
});

请注意,他还更改了服务器上的发布功能。如果您单击链接以显示 git 差异,这有助于理解。

于 2015-11-03T17:19:49.480 回答