Обещания AngularJS и вложенные контроллеры

У меня следующая дилемма:

Если у меня есть два вложенных контроллера, например:

Controller1
   Controller2

В Controller1 у меня есть поле

someDataService.getMyUser().then(function(user){      
   $scope.user = user;
}

который является результатом обещания (асинхронный вызов внешнего сервера). Все идет нормально. Но как мне справиться со следующей ситуацией:

Мне нужно использовать в Controller2

var userName = $scope.$parent.user.userName 

сразу после срабатывания контроллера. Как я могу настроить второй контроллер на ожидание разрешения обещания в первом контроллере и только затем оценить это назначение var userName? (иначе я бы получил, что $scope.$parent не определено)


person Rus Paul    schedule 29.07.2014    source источник


Ответы (2)


Разве вы не можете вместо вызова $scope.$parent.user.userName вызвать функцию (что-то вроде $scope.$parent.get_user()), которая вызывает someDataServive.getMyUser() и возвращает обещание?

Или не лучше ли ввести someDataService в Controller2 и напрямую вызвать функцию getMyUser()?

person Christian Benseler    schedule 29.07.2014
comment
Создание геттера кажется решением, сейчас попробую. Я не могу просто внедрить someDataService, потому что я хочу использовать второй контроллер на нескольких страницах, где родительский контроллер не всегда один и тот же и, следовательно, не всегда имеет этот someDataService. - person Rus Paul; 30.07.2014

Не очень хорошо иметь такую ​​​​зависимость, но если вам нужно вызвать какой-либо код инициализации в Controller2, вы можете сделать это, используя $broadcast для запуска кода инициализации Controller2 непосредственно из Controller1, когда объект будет загружен.

person Avael Kross    schedule 29.04.2015