我正在尝试实现类似于此的选项卡式界面:http://odetocode.com/blogs/scott/archive/2014/04/14/deep-linking-a-tabbed-ui-with-angularjs.aspx
但是,在我的状态更改中,父状态的控制器似乎已重新初始化(或者创建了新的$ scope?)
示例plunkr与我的项目有两个主要区别。
我试验了上面的plunkr并在父状态下添加了一个下拉列表;但是,当子状态发生变化时,父下拉值似乎仍然存在。我并不太关心孩子的状态,反正可能最终会使用粘性状态。
在我尝试将另一个包添加到我的项目之前,我想知道我是否在做一些根本性的错误。
这是我想要做的事情的粗略说明:http://plnkr.co/edit/TmRQN5K8OEc8vHG84G5z?p=preview
这是我的配置:
app.config(function($stateProvider, $urlRouterProvider){
$urlRouterProvider.when('/main',
function ($state) {
$state.go('parent.tab1', { main_id: '00008' });
});
$stateProvider
//Handle States Here
.state('parent', {
abstract: true,
url: '/parent?main_id',
templateUrl: "main.html",
controller: 'Main_Controller',
resolve: {
//Calls to API
}
})
.state('parent.tab1', {
url: "/applications",
templateUrl: "tab1.html",
controller:'Tab1Ctrl',
resolve: {
//Get some different data from an API
},
})
.state('parent.tab2', {
url: "/phasing",
templateUrl: "tab2.html",
controller: 'Tab2Ctrl',
resolve: {
//More API Data
}
});
});
答案 0 :(得分:0)
我已经制作了plunker working here
$urlRouterProvider
//.when('/main',
.when('',
function ($state) {
$state.go('parent.tab1', { main_id: '00008' })
});
此外,main.html发生了变化,不再使用 ng-controller
。我们只需要传递适当的控制器名称
$stateProvider
//Handle States Here
.state('parent', {
abstract: true,
url: '/parent?main_id',
templateUrl: "main.html",
controller: 'MainController',
resolve: {
//Calls to API
}
})
...
// MainController
// these two names should fit
app.controller("MainController", function($rootScope, $scope, $state) {
现在,它正在发挥作用,让我们讨论
快速回答:
一个片段:
<a ui-sref="parent.tab1({main_id:'00008'})"> go to tab1 with main_id '00008'</a><br />
<a ui-sref="parent.tab2({main_id:'00008'})"> go to tab2 with main_id '00008'</a><br />
<a ui-sref="parent.tab3({main_id:'00008'})"> go to tab3 with main_id '00008'</a><br />
检查here