Почему вызов разных подписок на одну и ту же коллекцию вызывает ошибку в метеоре?

0

Я работаю над этим шагом 12 углового метеорта, и у меня есть вопрос в

Остановка подписки Тема

вы можете использовать ctrl + f, используя "meteorSubscribe"

то ключевое предложение по этой теме

Причина в том, что мы вызываем другую подписку на одну и ту же коллекцию внутри контроллера 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 влияет на поиск и разбиение на группы с контроллером списка? Какова их связь?
Теги:
meteor
angular-meteor

1 ответ

2

EDIT: Если вы не отмените подписку, тогда, если вы перейдете и снова вернетесь, вы в конечном итоге попытаетесь дважды подписаться на ту же публикацию, что приведет к ошибке, потому что подписки в meteor продолжаются до тех пор, пока вы их не закончите.

Существует два способа избавиться от подписки с угловым метеоритом. Вы можете назначить переменную дескриптора подписке, а затем перейти от страницы, которую вы можете остановить. Два (рекомендуемый способ) - использовать $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.

  • 0
    Пожалуйста, прочитайте мой вопрос снова @Tj Gienger
  • 1
    @SarinSuriyakoon Я отредактировал свой ответ, чтобы пролить свет на вашу проблему.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню