2015-11-04 156 views
0

访问不同父控制器我有一个状态和一个嵌套状态作为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中定义的嵌套状态足以强制执行控制器之间的父子关系,还是需要嵌套控制器和模板?

如果是,那么我如何从子控制器访问父控制器的作用域?

回答

0

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

控制器模板也需要嵌套。

美国可以使用下面

*任何的四个选项中使用“点号”被嵌套。例如.state('contacts.list',{})。 *使用ui-router.stateHelper从嵌套状态树构建状态。

*将父属性与父名称一起作为字符串使用。例如:parent:'contacts'

*将父属性与父对象一起使用。例如父:联系人(其中“接触”是stateObject)

您可以在文档寻求更多的细节here

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

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

子状态会将它们的模板加载到它们父级的UI视图中。

有关更多详细信息,请参阅doc link