У меня есть приложение, в котором я использую главный ctr под названием `AppCtrl ', который я использую для обмена некоторыми глобальными варами, помощниками и данными.Угловое условие выполнения перед загрузкой контроллера
У меня также есть один контроллер для каждого вида, поэтому каждый раз, когда пользователь обновляет страницу или вводит мое приложение в первый раз, мне нужно выполнить некоторые задачи в определенном порядке, но они находятся в отдельных контроллерах.
Например, в AppCtrl
мне нужно загрузить некоторые пользовательские данные из моей базы данных, но мне нужно, чтобы маршрут или вторичный контроллер, позволяет называть его HomeCtrl
, ждет этого, прежде чем он может загрузить его содержимое, так как он dependes на информация от AppCtrl
.
Я использую $scope
var для обмена данными между контроллерами.
Итак, как я могу сделать HomeCtrl
wait for the end of AppCtrl
Выполнение запуска для его обработки?
EDIT:
Я создал Pastebin, http://pastebin.com/CUtTmKzT, чтобы поделиться своим AppCtrl
и пример моего HomeCtrl
. Для ясности я удалил много контента и оставил только некоторые подписи, чтобы вы могли понять, чего я пытаюсь достичь.
Чтобы объяснить это лучше, я хочу выполнить некоторые методы на каждой загрузке страницы, которые будут запрашивать некоторые данные из моего api и делиться им между всеми моими контроллерами. Я могу сделать это только один раз, так как приложение будет активно использоваться.
Итак, после моего Pastebin кода у меня есть метод handleLoginSuccess
, который будет вызываться после того, как пользователь получит доступ приложения, он будет проверять, существует ли данные пользователя на моем $rootScope
, если он делает это будет вызывать метод обработайте эти данные, setCurrentUser
, и если это не так, он вызовет метод запроса этих данных из api, getUserData
, а затем вызовет другой метод для его обработки.
у вас есть несколько пробелов в знании углового каркаса здесь, что сделает это очень трудным. Во-первых, цикл '$ digest', который отображает HTML, не привязан к порядку загрузки контроллеров. Во-вторых. каждый контроллер имеет свой собственный '$ scope', поэтому использование' $ scope' для «совместного использования» данных может потенциально создать некоторые неприятные проблемы при устранении ошибок. Вы можете подумать о своей архитектуре здесь и подумать об использовании директив или компонентов или использовать маршрутизатор для управления своими представлениями. – Claies
@Claies, не могли бы вы привести пример того, как я могу использовать директиву или компоненты для обмена данными?Потому что я не вижу, как они могли бы делиться им между контроллерами без использования области действия и без попадания в базу данных все время. Кроме того, я не говорил о html-рендере, но при выполнении методов – Terkhos
хорошо, обмен данными лучше оставить поставщикам (сервисам или фабрикам, обычно), которые являются объектами singleton. Я упоминаю только директивы и компоненты, потому что вы пытаетесь понять иерархическую природу вашего HTML здесь, какие контроллеры не строго строго придерживаются. – Claies