Порядок загрузки контроллера отличается при загрузке или навигации
Так что в этом может быть виновата структура моего контроллера. Здесь вы можете увидеть родительский и дочерний контроллеры, но важные части здесь:
Родительский контроллер
//Load version
$scope.person = People.people.get({ id: $routeParams.id}, function(person) {
var associations = {
events: person.events || [],
people: person.people || [],
places: person.places || []
};
$scope.$broadcast('setAssociations', associations);
});
//Event version
$scope.$on('getAssociations', function(e, args) {
var associations = {
events: $scope.person.events || [],
people: $scope.person.people || [],
places: $scope.person.places || []
};
$scope.$broadcast('setAssociations', associations);
});
Детский Контроллер
$scope.$on('setAssociations', function(event, args) {
$scope.parentEvents = args.events;
});
$scope.$emit('getAssociations', {});
Идея в том, что мне нужно получить events
от родителей person
объект до дочернего контроллера. Проблема в том, что каждый метод повышения setAssociations
от родителя работает только в одном контексте.
load
версия работает, если на страницу переходят из приложения (хеш, навигация). Однако при перезагрузке или навигации извне (полная загрузка) дочернее событие никогда не вызывается, возможно потому, что оно еще не зарегистрировало своих слушателей.
event
версия работает, если страница обновлена, или к ней обращены из-за пределов приложения (все, что приводит к полной загрузке страницы). При переходе к $scope
пусто, и этот метод не работает.
Таким образом, порядок, в котором приложение загружает контроллеры, отличается при "глубинном связывании" или обновлении, а также при выполнении внутренней навигации. Как я могу получить согласованное поведение нагрузки от угловых контроллеров, у которых есть родительские дочерние отношения?
1 ответ
Если посмотреть на проблему с другой точки зрения, поскольку дочерние области прототипически наследуются от родительских областей, это означает, что любые свойства, которые мы определяем в родительской области, сразу же становятся доступны в дочерней области... даже если вы добавите свойства в родительскую область позже, после создания дочерней области. Другими словами, вам может не потребоваться использовать событие, чтобы получить необходимую информацию для ребенка.
Если ваша проблема заключается просто в том, что дочерней области требуется некоторая информация из родительской области, просто назначьте эти данные новому родительскому свойству $scope, и ваш дочерний вид должен получить к нему доступ. Когда он станет определенным, он появится в дочернем представлении. Вместо var associations
, пытаться $scope.associations
,
Вот искусственная скрипка, которая использует ng-щелчок, чтобы добавить некоторые данные в родительскую область, которая затем становится видимой в дочернем представлении.
Решает ли это вашу проблему?