Angular UI 路线中的嵌套状态和视图
Nested sates and views in Angular UI Route
抱歉,如果之前有人问过类似的问题,但我一直在努力让某个设置工作一段时间。我从一个现有问题中提取了一个有效的 plunker,并试图根据我的需要对其进行一些调整。
原始 Plunker:http://plnkr.co/edit/uY1Sl3f0KCTukPGHDRdW
我的(略微)编辑的分支:http://plnkr.co/edit/hlw4Et00UeGjzxD4Mszi
我想要实现的是一个包含页面内容的页眉、页脚和未命名视图的基本布局。我可以用原来的 plunker 做到这一点。但是当我尝试变得更花哨并拥有更像这样的结构时:
$urlRouterProvider.otherwise('/home/list');
$stateProvider
.state('root', {
abstract: true,
views: {
'@': {
controller: 'RootCtrl',
controllerAs: 'rootCtrl'
},
'header@': {
templateUrl: 'header.html',
controller: 'HeaderCtrl',
controllerAs: 'headerCtrl'
},
'footer@': {
templateUrl: 'footer.html',
controller: 'FooterCtrl',
controllerAs: 'footerCtrl'
}
}
})
这里是调整后的状态定义:
.state('root.home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<ui-view></ui-view>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
},
'list@root.home': {
url: '/list',
template: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});
我在这里要做的是使 'root.home' 状态只是一个基本状态,用于在 URL 'home' 或 url 之前添加任何内容在我的实际应用中。我已经尝试通过 ui-route 示例应用程序准备就绪,但要接受的内容很多,而且我还在兜圈子。我敢肯定这很简单...
有一个working updated plunker。有一个 状态定义 调整。
这是原始代码:
.state('root.home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<ui-view></ui-view>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
},
'list@root.home': {
url: '/list',
template: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});
哪里出了问题?首先注意 - 我们不需要定义 parent: 'root'
,因为我们的 parent 在我们的名字 'root.home' 中。所以,为了更清楚,我决定保留 parent 设置,同时将状态名称更改为 'home'.
其次,我们的状态有两个视图,但第二个视图被命令注入第一个视图。
// this line is instructing UI-Router: inject this into
// the other view definition of the current state
// search for ui-view="list"
'list@root.home'
但是没有ui-view="list"
定义。
最后,我们不能为视图声明 url
。 Url 仅属于以下州:
// this is wrong. The view cannot have url
// url is for state
'list@root.home': {
url: '/list',
所以,我们应该介绍一下我们州的child... 'home.list'
这是调整后的状态定义(来自新的working plunker):
.state('home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<div ui-view="list"></div>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
})
.state('home.list', {
url: '/list',
views: {
'list': {
templateUrl: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});
抱歉,如果之前有人问过类似的问题,但我一直在努力让某个设置工作一段时间。我从一个现有问题中提取了一个有效的 plunker,并试图根据我的需要对其进行一些调整。
原始 Plunker:http://plnkr.co/edit/uY1Sl3f0KCTukPGHDRdW
我的(略微)编辑的分支:http://plnkr.co/edit/hlw4Et00UeGjzxD4Mszi
我想要实现的是一个包含页面内容的页眉、页脚和未命名视图的基本布局。我可以用原来的 plunker 做到这一点。但是当我尝试变得更花哨并拥有更像这样的结构时:
$urlRouterProvider.otherwise('/home/list');
$stateProvider
.state('root', {
abstract: true,
views: {
'@': {
controller: 'RootCtrl',
controllerAs: 'rootCtrl'
},
'header@': {
templateUrl: 'header.html',
controller: 'HeaderCtrl',
controllerAs: 'headerCtrl'
},
'footer@': {
templateUrl: 'footer.html',
controller: 'FooterCtrl',
controllerAs: 'footerCtrl'
}
}
})
这里是调整后的状态定义:
.state('root.home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<ui-view></ui-view>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
},
'list@root.home': {
url: '/list',
template: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});
我在这里要做的是使 'root.home' 状态只是一个基本状态,用于在 URL 'home' 或 url 之前添加任何内容在我的实际应用中。我已经尝试通过 ui-route 示例应用程序准备就绪,但要接受的内容很多,而且我还在兜圈子。我敢肯定这很简单...
有一个working updated plunker。有一个 状态定义 调整。
这是原始代码:
.state('root.home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<ui-view></ui-view>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
},
'list@root.home': {
url: '/list',
template: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});
哪里出了问题?首先注意 - 我们不需要定义 parent: 'root'
,因为我们的 parent 在我们的名字 'root.home' 中。所以,为了更清楚,我决定保留 parent 设置,同时将状态名称更改为 'home'.
其次,我们的状态有两个视图,但第二个视图被命令注入第一个视图。
// this line is instructing UI-Router: inject this into
// the other view definition of the current state
// search for ui-view="list"
'list@root.home'
但是没有ui-view="list"
定义。
最后,我们不能为视图声明 url
。 Url 仅属于以下州:
// this is wrong. The view cannot have url
// url is for state
'list@root.home': {
url: '/list',
所以,我们应该介绍一下我们州的child... 'home.list'
这是调整后的状态定义(来自新的working plunker):
.state('home', {
parent: 'root',
url: '/home',
views: {
'@': {
template: '<div ui-view="list"></div>',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
})
.state('home.list', {
url: '/list',
views: {
'list': {
templateUrl: 'homeList.html',
controller: 'HomeController',
controllerAs: 'homeCtrl'
}
},
});