2015-04-27 5 views
0

Я в некоторых штатах определены следующим образом:Доступ к UI-маршрутизатор просмотры родительского состояния от состояния ребенка

$stateProvider.state('main.product', { 
    url: '', 
    abstact: true, 
    views: { 
    '': { 
     templateUrl: 'product/index.html' 
    }, 
    'sidebar': { 
     templateUrl: 'product/sidebar.html' 
    } 
    } 
}); 

$stateProvider.state('main.product.overview', { 
    url: '/products/:product_id', 
    templateUrl: 'product/overview.html', 
    controller: 'ProductOverviewController' 
}); 

В моем «основных оберточных» контроллере, я хотел бы получить доступ к абстрактным состояниям views, как это:

angular.module('myApp').controller('MainController', function($rootScope, $scope, $state, $stateParams) { 

    console.log($state.$current.views.sidebar.templateUrl); 

}); 

Это работает, если я в родительском состоянии main.product. Однако, как и ожидалось, это возвращает неопределенное для дочернего состояния, main.product.overview.

Как я могу получить доступ к views из состояния ребенка?

Я знаю, что я мог бы использовать data object, например:

$stateProvider.state('main.product', { 
    url: '', 
    abstact: true, 
    views: { 
    '': { 
     templateUrl: 'product/index.html' 
    }, 
    'sidebar': { 
     templateUrl: 'product/sidebar.html' 
    } 
    }, 
    data: { 
    'sidebar': { 
     templateUrl: 'product/sidebar.html' 
    } 
    } 
}); 

Тогда доступ так:

console.log($state.current.data.sidebar.templateUrl) 

Но это не чистая, templateUrl будет дублироваться.

Можно ли получить доступ к views из состояния ребенка?

ответ

0

Вы можете обратиться в любое состояние с помощью метода get

$state.get('main.product').views.sidebar.templateUrl 
+0

Она должна быть динамичной, хотя. Не могли бы вы сделать что-то вроде: '$ state.get (current) .views.sidebar.templateUrl'? –

+0

Да, если 'current' - ваша переменная, которая содержит имя состояния – Rezigned

+0

Это работает для родительского состояния, но не для дочернего. например: '$ state.get (toState.name) .views.sidebar.templateUrl' (' templateUrl' определяется в родительском элементе). Можем ли мы получить доступ к родительскому «представлению» из дочернего? –