AngularJS может вызывать метод $on более одного раза для одной широковещательной передачи?
Я вижу очень странное поведение в своем приложении AngularJS.
Когда выполняется одна широковещательная передача, приемник (только) запускается дважды.
Эффект для всего приложения выглядит так, как если бы приемник был только один раз. (т.е. в корзину добавляется только один элемент).
Если вы дважды запускаете $broadcast (т.е. дважды нажмите кнопку, которая запускает $broadcast), вы получите четыре исполнения приемника, но в корзину добавлено несколько элементов.
Есть ли какой-то перерасчет, похожий на таблицу? Функции $scope не должны влиять на "простые" переменные javascript?
Моя проблема в том, что я добавил alert
, и он отображается дважды.
Я сделал еще одну работу по отладке:
Я добавил счетчик, который подсчитывал количество полученных трансляций.
Если объем (без доллара) глобальный, я получаю двойной результат. Если его область локальна для функции Ctlr, я получаю не удвоенный результат.
Могу ли я каким-то образом создать два экземпляра моего контроллера?
Я вижу из firebug, что $HTTP-запросы ajax, сделанные с контроллера, происходят только один раз, поэтому я очень смущен.
Ответы
Ответ 1
Я бы начал с добавления инструкции console.log в тело вашего контроллера, чтобы узнать, сколько раз он инициализировался. Жизненный цикл для контроллеров может быть коротким, поскольку они связаны с элементами DOM, которые могут быть созданы и уничтожены часто.
Если вы используете $routeProvider, указываете ли вы значение свойства "controller"? Если да, задаете ли вы один и тот же контроллер в частичном, используя атрибут "ng-controller"? Вы действительно хотите выбрать один или другой, а не оба, иначе два экземпляра контроллера будут создаваться каждый раз, когда вы переходите к этому маршруту.