从嵌套状态

时间:2015-11-04 13:42:05

标签: javascript angularjs angularjs-scope angular-ui-router

我有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.htmlpost.html都是完全独立且独立的。

app.js中定义的嵌套状态是否足以强制控制器之间的父子关系,还是控制器和模板也需要嵌套?

如果是,那么如何从子控制器访问父控制器的范围?

1 个答案:

答案 0 :(得分:0)

app.js中定义的嵌套状态是必需的,但不足以强制实现父子关系。

控制器模板也需要嵌套。

可以使用以下四个选项中的任何一个嵌套状态

*使用'点符号'。例如.state(' contacts.list',{})。

*使用ui-router.stateHelper从嵌套状态树构建状态。

*使用父属性作为字符串的父属性。例如:parent:' contacts'

*将父属性与父对象一起使用。例如,parent:contacts(其中' contacts'是stateObject)

您可以在文档here

中查找更多详细信息

您可以按任何顺序和模块注册状态。您可以在父状态存在之前注册孩子。它会将它们排队,一旦父状态被注册,孩子就会被注册。

父状态必须存在,并且没有两个状态可以具有相同的名称。

子状态会将其模板加载到父级的ui视图中。

请参阅doc link了解详情。