从嵌套状态访问不同的父控制器

Accessing different parent controller from nested states

本文关键字:控制器 嵌套 状态 访问      更新时间:2023-09-26

我有一个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"
    })
}

两种状态的控制器不同。

此外,嵌套状态的模板没有嵌套在父状态的模板中。模板CCD_ 2和CCD_。

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

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

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

控制器模板也需要嵌套。

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

*使用"点表示法"。例如.state('contacts.list',{})。

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

*使用以父名称作为字符串的父属性。例如:parent:"contacts"

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

您可以在这里的文档中查找更多详细信息

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

父状态必须存在,并且任何两个状态都不能具有相同的名称。

子状态将把它们的模板加载到其父状态的ui视图中。

请参考文档链接了解更多详细信息。