【问题标题】:Accessing different parent controller from nested states从嵌套状态访问不同的父控制器
【发布时间】:2016-02-05 00:58:41
【问题描述】:

我有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 中定义的嵌套状态是否足以强制控制器之间的父子关系,或者控制器和模板是否也需要嵌套?

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

【问题讨论】:

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


    【解决方案1】:

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

    控制器模板也需要嵌套。

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

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

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

    *使用以父名作为字符串的父属性。例如:父母:'联系人'

    *对父对象使用父属性。例如父级:联系人(其中 'contacts' 是 stateObject)

    您可以在文档here中寻求更多详细信息

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

    父状态必须存在,并且两个状态不能同名。

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

    请参考doc link了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多