Данные дочернего контроллера AngularJS не загружаются в пользовательский интерфейс при использовании $emit для обновления родительских данных

Я использую AngularJS 1.5 и использую ‘$emit’ для отправки события родительскому контроллеру для обновления данных родительского контроллера. В '$On' я написал логику для обновления данных родительского контроллера.

Теперь данные родительского контроллера обновляются, но после этого он не может связать данные для дочернего контроллера, из которого был запущен «$ Emit».

Я попытался использовать ‘$apply’, но он говорит, что ‘$digest’ уже выполняется. Я также использую инструмент Batrang для просмотра данных, и он показывает эту страницу со всеми этими данными, но не отображается в пользовательском интерфейсе.

Может ли кто-нибудь сказать мне, как заставить angular связать эти данные с элементом управления HTML, который уже доступен на странице.

Я не могу разместить здесь образец кода, потому что это живой проект, и мне придется создать образец проекта, чтобы воспроизвести проблему. Несмотря на то, что если ответить на мой запрос без примера кода непросто, я размещу образец кода на Plunker через день.


person Banketeshvar Narayan    schedule 06.10.2016    source источник


Ответы (1)


Основываясь на документации Angular, существует два метода объявления контроллера в HTML:

один связывает методы и свойства непосредственно с контроллером, используя ng-controller="SettingsController1 as settings"

один вводит $scope в контроллер: ng-controller="SettingsController2"

Второй вариант более распространен в сообществе Angular и обычно используется в шаблонах и в этом руководстве. Однако есть преимущества в привязке свойств непосредственно к контроллеру и избегании области видимости.

Использование controller as делает очевидным, к какому контроллеру вы обращаетесь в шаблоне, когда к элементу применяется несколько контроллеров. Если вы пишете свои контроллеры как классы, у вас есть более легкий доступ к свойствам и методам, которые будут отображаться в области видимости, из кода контроллера. Поскольку в привязках всегда есть ., вам не нужно беспокоиться о прототипах примитивов маскирования наследования.

Таким образом, вы всегда можете ссылаться на родительскую область в дочерней области, используя controller as:

<div ng-controller="parentController as parent">
    <span>{{parent.title}}</span>
    <div ng-controller="childController as child">
        <span>{{parent.title}}</span>
        <span>{{child.title}}</span>
    </div>
</div>
person MarkoCen    schedule 06.10.2016
comment
Привет, MarKoSen, спасибо за ваш ответ, но у меня нет проблем с методом вызова. Я использовал $emit, который отлично работает и обновляет родительские данные, а затем вызываю метод для обновления дочерних данных. даже если дочерние данные загружаются в DOM, но не отображаются в пользовательском интерфейсе. поэтому мой главный вопрос заключается в том, как мне отобразить эти данные в пользовательском интерфейсе, которые уже доступны в DOM. - person Banketeshvar Narayan; 07.10.2016