2015-07-23 3 views
1

У меня есть следующий код:Угловые вложенные ресурсы данных

//routes 
 
.state('app.parent', { 
 
    url: '/parent', 
 
    templateUrl: 'parent.html', 
 
    controller: 'ParentCtrl' 
 
}) 
 
.state('app.parent.child', { 
 
    url: '/child', 
 
    controller: 'ChildCtrl', 
 
    templateUrl: 'child.html', 
 
}) 
 

 

 
//controllers 
 
.controller('ParentCtrl', ['$scope', 'SomeResource', function ($scope, SomeResource) { 
 
    $scope.resources = []; 
 
    
 
    SomeResource.query({}, function(data) { 
 
    $scope.resources = data; 
 
    }); 
 
}]) 
 
.controller('ChildCtrl', ['$scope', 'OtherResource', function ($scope, OtherResource) { 
 
    $scope.other = {}; 
 
    ... 
 
}])
<!-- VIEWSs --> 
 
<!-- parent.html --> 
 
... 
 
<div ui-view> 
 
    <table class="table table-hover table-striped"> 
 
    <tbody> 
 
     <tr ng-repeat="resource in resources"> 
 
     ... 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</div> 
 

 
<!-- child.html --> 
 
<div class="form"> 
 
\t ... 
 
</div>

И некоторые другие вложенные государства.

Проблема заключается в том, что я получаю доступ к любому «дочернему» состоянию «parent», родительский контроллер, по-видимому, всегда выполняется, поэтому вызов SomeResource.query вызывается для каждого дочернего состояния.

Мне нужен запрос только для родителей, а не для любого ребенка состояния, и это нужно вкладываться.

Что я делаю неправильно?

+0

Использование вложенных состояний по определению вызывает все вложенные контроллеры. –

+0

делает что-то вроде [этого] (http://stackoverflow.com/questions/22985259/routing-dynamic-paths-recursively-in-angularjs)? –

+0

@ Thom-x no, то есть назад – charlietfl

ответ

0

В соответствии с angular-ui docs,

Когда приложение находится в определенном состоянии, когда состояние является «активным» -all своими предками состояний неявно активны, а также. Ниже, когда состояние «contacts.list» активно, состояние «контакты» также неявно активируется, потому что это родительское состояние «contacts.list».

Это означает, что если вы не нуждаетесь в том, чтобы родительский актив был активным при обращении к ребенку, не используйте вложенность. (В вашей структуре URL-адресов также не хватает вложенности, что может быть знаком, который вам не нужен в вашей государственной структуре.)

Если вы хотите вложить состояния по другим причинам, и вы просто хотите избежать дорогостоящего запроса более одного раза, вы можете захотеть реорганизовать свою реализацию SomeResource. Например, вы можете добавить некоторое кеширование в эту службу, чтобы повторные вызовы query() не вызывали накладных расходов.

Смежные вопросы