我有app.js
中定义的状态和嵌套状态:
function config($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider) {
$httpProvider.interceptors.push('authInterceptor');
$stateProvider.state("feed", { //parent state
url: "/feed",
controller: "FeedCtrl as feed",
templateUrl: "/static/templates/feed.html"
})
.state("feed.post", { //nested state
url: "/post/:id",
controller: "PostCtrl",
templateUrl: "/static/templates/post.html"
})
}
两种状态的控制器都不同。
此外,嵌套状态的模板不嵌套在父状态的模板中。模板feed.html
和post.html
都是完全独立且独立的。
app.js中定义的嵌套状态是否足以强制控制器之间的父子关系,还是控制器和模板也需要嵌套?
如果是,那么如何从子控制器访问父控制器的范围?
答案 0 :(得分:0)
app.js中定义的嵌套状态是必需的,但不足以强制实现父子关系。
控制器模板也需要嵌套。
可以使用以下四个选项中的任何一个嵌套状态
*使用'点符号'。例如.state(' contacts.list',{})。
*使用ui-router.stateHelper从嵌套状态树构建状态。
*使用父属性作为字符串的父属性。例如:parent:' contacts'
*将父属性与父对象一起使用。例如,parent:contacts(其中' contacts'是stateObject)
您可以在文档here
中查找更多详细信息您可以按任何顺序和模块注册状态。您可以在父状态存在之前注册孩子。它会将它们排队,一旦父状态被注册,孩子就会被注册。
父状态必须存在,并且没有两个状态可以具有相同的名称。
子状态会将其模板加载到父级的ui视图中。
请参阅doc link了解详情。