Javascript Angularjs ui路由器:父级解析不会从子级触发
在我的angularjs应用程序中,我有角度ui引导选项卡,在选择选项卡时,我使用$state.go和浏览器上的状态转换url更改为不同的状态 我的父静态选项卡指向$state:home.summary,而动态选项卡指向$state:home.summary.detail。 当我从父级转到子级时,会激发子级解析方法,但当我从子级移动到父级时,不会激发父级解析方法 状态更改,url更改,但未触发父解析并保持不变 Routes.jsJavascript Angularjs ui路由器:父级解析不会从子级触发,javascript,angularjs,angular-ui-bootstrap,angular-ui-router,Javascript,Angularjs,Angular Ui Bootstrap,Angular Ui Router,在我的angularjs应用程序中,我有角度ui引导选项卡,在选择选项卡时,我使用$state.go和浏览器上的状态转换url更改为不同的状态 我的父静态选项卡指向$state:home.summary,而动态选项卡指向$state:home.summary.detail。 当我从父级转到子级时,会激发子级解析方法,但当我从子级移动到父级时,不会激发父级解析方法 状态更改,url更改,但未触发父解析并保持不变 Routes.js .state('home', { abstr
.state('home', {
abstract: true,
url: '/home',
templateUrl: 'scripts/home.html'
})
.state('home.summary', {
url: '/summary',
controller: 'SummaryCtrl',
views: {
'summary':
{
templateUrl: "scripts/home/summary.html",
resolve: {
load: function ($rootScope,$stateParams,ServiceA) {
ServiceA.get().$promise;
}
}
}
}
})
.state('home.summary.detail', {
url: '/detail/:id',
controller:'DetailCtrl',
views: {
'detail':
{
templateUrl: "scripts/home/detail.html",
resolve: {
load: function ($rootScope,$stateParams,ServiceB,$timeout) {
var promise=ServiceB.retrieve(id);
return promise;
}
}
}
}
})
Tabs.html
<div ng-controller="TabsCtrl">
<ul tabset>
<li tab select="selectStaticTab()">
<span tab-heading>Search<a style="left:9px" class="glyphicon glyphicon-search"></a> </span>
<div class="well">
<div ui-view="summary"></div>
</div>
</li>
<li tab ng-repeat="tab in tabs track by tab.id" active="tab.active" select="tab.select()">
<span tab-heading>{{tab.title}}</span>
<div ui-view="detail"></div>
</li>
</ul>
</div>
-
搜寻
-
{{tab.title}}
为什么不从子状态触发父解析???
任何帮助都将不胜感激
多谢各位
你的草稿有很多问题,我试着把它们都写出来 1) 首先,我们使用的是
ui路由器
,因此不能使用
。我们现在有了状态,每个状态都可以有更多的视图,这些视图都有自己的控制器(即控制器属于一个状态的视图部分)
2) 正如刚才所解释的,视图
确实有控制器
(正好一个)。非状态-它们没有控制器。所以我将控制器定义从状态移到视图中
.state('home.summary', {
url: '/summary',
// NOT HERE
views: {
'summary': {
...
controller: 'SummaryCtrl',
}
}
})
.state('home.summary.detail', {
url: '/detail/:id',
// NOT HERE
views: {
'detail@home': {
...
controller: 'DetailCtrl',
3) 父级和子级的解析应具有不同的名称。我这样更改了子解析(请参见名称load2
而不是load
):
4) 即使我们想要这样:ui视图
也不能在中继器内部。当然可以,但这仅仅意味着状态视图将被放置在那里,重复的次数是相同的(但请参见下面的..如何做到这一点)
我将Sui视图
移动到中继器外部:
<li tab
ng-repeat="tab in tabs track by tab.id" active="tab.active" select="tab.select()">
<span tab-heading>{{tab.title}}</span>
</li>
<hr />
<div ui-view="detail"></div> // moved outside of repeater
检查完整的工作解决方案
很少有人阅读(我会说):
- 如何使用
- 如何披露
<li tab
ng-repeat="tab in tabs track by tab.id" active="tab.active" select="tab.select()">
<span tab-heading>{{tab.title}}</span>
</li>
<hr />
<div ui-view="detail"></div> // moved outside of repeater
.state('home.summary', {
url: '/summary',
views: {
'summary': { // ok name, while direct parent is home
....
}
}
})
.state('home.summary.detail', {
url: '/detail/:id',
views: {
'detail@home': { // we have to add @home to say that the target
.... // is in a home state not in our parent
}
}