AngularJS может вызывать метод $on более одного раза для одной широковещательной передачи?

Я вижу очень странное поведение в своем приложении AngularJS.

Когда выполняется одна широковещательная передача, приемник (только) запускается дважды.

Эффект для всего приложения выглядит так, как если бы приемник был только один раз. (т.е. в корзину добавляется только один элемент).

Если вы дважды запускаете $broadcast (т.е. дважды нажмите кнопку, которая запускает $broadcast), вы получите четыре исполнения приемника, но в корзину добавлено несколько элементов.

Есть ли какой-то перерасчет, похожий на таблицу? Функции $scope не должны влиять на "простые" переменные javascript?

Моя проблема в том, что я добавил alert, и он отображается дважды.


Я сделал еще одну работу по отладке:

Я добавил счетчик, который подсчитывал количество полученных трансляций.

Если объем (без доллара) глобальный, я получаю двойной результат. Если его область локальна для функции Ctlr, я получаю не удвоенный результат.

Могу ли я каким-то образом создать два экземпляра моего контроллера?

Я вижу из firebug, что $HTTP-запросы ajax, сделанные с контроллера, происходят только один раз, поэтому я очень смущен.

Ответ 1

Я бы начал с добавления инструкции console.log в тело вашего контроллера, чтобы узнать, сколько раз он инициализировался. Жизненный цикл для контроллеров может быть коротким, поскольку они связаны с элементами DOM, которые могут быть созданы и уничтожены часто.

Если вы используете $routeProvider, указываете ли вы значение свойства "controller"? Если да, задаете ли вы один и тот же контроллер в частичном, используя атрибут "ng-controller"? Вы действительно хотите выбрать один или другой, а не оба, иначе два экземпляра контроллера будут создаваться каждый раз, когда вы переходите к этому маршруту.