我有以下代码:
//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">
...
</div>
以及其他一些嵌套状态。
问题是当我访问“父”的任何“子”状态时,父控制器显然总是被执行,因此每个子状态都会调用 SomeResource.query 。
我需要 查询 仅针对父级而不是任何子级状态,并且需要嵌套。
我做错了什么?
答案 0 :(得分:0)
当应用程序处于特定状态时 - 当状态为&#34;活动&#34; - 其所有祖先状态也是隐式活动状态。下面,当&#34; contacts.list&#34;国家是活跃的,&#34;联系人&#34; state也是隐式活动的,因为它是&#34; contacts.list&#34;的父状态。
这意味着如果您在访问子项时不需要父项处于活动状态,请不要使用嵌套。 (您的URL结构也缺少嵌套,这可能是您在州结构中不需要它的标志。)
如果您确实想要出于其他原因嵌套状态,并且您只是想避免运行多次的昂贵查询,那么您可能希望重构SomeResource
实现。例如,您可以在该服务中添加一些缓存,以便重复调用query()
不会导致开销。