Ответ 1
I. Ответ на вопрос:
... дочерний с не вложенным... Есть ли способ получить это свойство metricdata в дочернем?
Основан на
Что наследуют дочерние государства из родительских состояний?
Дочерние состояния DO наследуют следующее из родительских состояний:
- Разрешенные зависимости через разрешение
- Пользовательские свойства данных
Ничего больше не наследуется (без контроллеров, шаблонов, URL-адресов и т.д.).
в сочетании с
Наследование наследования по только иерархии просмотров
Имейте в виду, что свойства области только наследуют цепочку состояний, если представления ваших состояний вложены. Наследование свойств области не имеет ничего общего с вложением ваших состояний и всем, что связано с вложенность ваших представлений (шаблонов).
Вполне возможно, что у вас есть вложенные состояния, шаблоны которых заполняют ui-виды в разных не вложенных местах на вашем сайте. В этом случае вы не можете ожидать доступа к переменным области видимости представления родительского состояния в представлениях дочерних состояний.
II. Пока это должно быть ясно, мы все еще должны найти способ решения:
... Есть ли способ, чтобы получить это свойство metricdata в дочернем без необходимости вручную повторять вызов ajax еще раз в дочернем элементе.
И я бы сказал, есть и ответ. Например.
- Angular UI-маршрутизатор Вложенное разрешение состояния в дочерних состояниях
- Как предотвратить перезагрузку именованного вида при изменении состояния? Угловой интерфейс AngularJS
.. переместите общие представления/преобразователи в наименьший общий знаменатель...
например. мы можем сделать это как в этом Q и A: Управление порядком операций с сервисами и контроллерами, см. plunker:
Особое положение родителя/корня:
$stateProvider
.state('root', {
abstract : true,
// see controller def below
controller : 'RootCtrl',
// this is template, discussed below - very important
template: '<div ui-view></div>',
// resolve used only once, but for available for all child states
resolve: {
user: function (authService) {
return authService.getUserDetails();
}
}
})
Передача разрешенных материалов в область $scope (унаследованная каждым дочерним элементом)
.controller('RootCtrl', function($scope,user){
$scope.user = user;
})
Это вводится поверх нашей иерархии состояния/представления, и любое дочернее состояние будет получать от нее прибыль
// any previously root state will just use the above as a parent
.state('index', {
url: '/',
parent : 'root',
Проверьте здесь и просмотрите его в рабочий пример