我刚刚开始迁移到AngularJS,我已经遇到angular-ui/ui-router框架$stateProvider
的问题了。这就是我到目前为止所做的:
angular
.module('testApp', ['ui.router'])
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/index/home");
$stateProvider
.state('index', {
abstract: true,
url: "/index",
template: "parent"
})
.state('index.home', {
url: "/home",
template: "child"
})
})
.controller("MainController", function() {
})
现在,运行此脚本会将我重定向到http://example.com/#/index/home
,但它只会在页面上显示 parent 字符串。未显示子字符串。根据我的理解,这应该加载第一个模板,因为我们位于/#/index
域部分,然后是第二个,因为我们位于嵌套页面/#/index/home
上。
有人可以帮助我并解释为什么这不符合预期吗?
答案 0 :(得分:4)
在您的父级模板中,您需要另一个<div ui-view></div>
才能呈现子状态。
如果您想要多个嵌套视图,则父模板中可以有多个ui-view
。你只需要命名它们。例如,
父模板:
<h1>parent</h1>
<div ui-view="child1"></div>
<div ui-view="child2"></div>
您可以按如下方式定义子状态:
$stateProvider
.state('index', {
abstract: true,
url: "/index",
template: "parent"
})
.state('index.home', {
url: "/home",
views: {
'child1': {
templateURL: "child1.html"
}
}
})
.state('index.home2', {
url: '/home2',
views: {
'child2': {
templateURL: 'child2.html'
}
}
})
*注意我使用的是templateURL而不是模板。假设您的应用具有模块化文件结构。