0

私はこの角流星チュートリアルのステップ 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に何も(エラー)が表示されませんが、チュートリアルが言うように間違った結果が発生するだけです

パーティーの詳細ページに移動してから戻ると、ページネーションと検索が機能しなくなります。

それから私は2つの質問を受けました

  1. cmd でエラーが表示されないのはなぜですか?
  2. partyDetailsコントローラーからのエラーがpartiesListコントローラーの検索とページネーションに影響するのはなぜですか? 彼らの関係は何ですか?
4

1 に答える 1

2

編集: サブスクリプションをキャンセルしない場合、別の場所に移動して再度戻ると、同じパブリケーションを 2 回サブスクライブしようとすることになり、エラーが発生します。Meteor のサブスクリプションは終了するまで続くためです。

angular-meteor でサブスクリプションを取り除くには 2 つの方法があります。サブスクリプションにハンドル変数を割り当てることができ、ページから離れたときにそれを停止できます。2 つ (推奨される方法) は、スコープが破棄されたときにサブスクリプションを自動的に削除するように設定されているため、$scope.$meteorSubscribe代わりに使用することです。$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 diff を表示すると理解しやすくなります。

于 2015-11-03T17:19:49.480 に答える