【问题标题】:Angular ui-router: How to load child controller instead of parent controller?Angular ui-router:如何加载子控制器而不是父控制器?
【发布时间】:2015-10-11 08:29:14
【问题描述】:

我的 Angular 应用中有以下嵌套路由:

.state('mapping', {
    url: '/mapping',
    templateUrl: 'app/components/mapping/mapping.html',
    controller: 'MapCtrl as map',
    abstract: true,
    authenticate: true
})
.state('mapping.all', {
    url: '',
    templateUrl: 'app/components/mapping/partials/all.html',
    authenticate: true
})
.state('mapping.project', {
    url: '/:projectName',
    controller: 'ProjectCtrl as proj',
    templateUrl: 'app/components/mapping/partials/project.html',
    authenticate: true
})

访问'mapping.project' 时,ProjectCtrl 永远不会被加载。相反,MapCtrl 被加载,就好像我仍处于父状态一样。

如何使用特定于该子状态的另一个控制器覆盖父控制器?

我希望每次访问该特定子状态时都加载此控制器,如果每个子状态都有一个父控制器,则不会发生这种情况。

【问题讨论】:

  • 你能分享最终的网址吗?它是否包含项目名称?
  • 是的,它确实包含一个项目名称。

标签: javascript angularjs angular-ui-router state


【解决方案1】:

任何controller 都与view 相关(与state 无关)。这意味着,如果:

...访问 mapping.project 时,ProjectCtrl 永远不会被加载...

该视图未加载。这主要意味着 parent view (app/components/mapping/mapping.html) 不包含目标:

<div ui-view=""></div>

所以,如果我们在父模板中放置一个目标(ui-view=""),子状态会将其视图注入该位置。但这不会取代父控制器。会的

  • 访问父(或直接子)时调用父ctrl
  • 如果从父级访问子级,父级ctrl 不会重新初始化,但子级ctrl 将被初始化

查看这些以获取更多详细信息:

【讨论】:

  • 我在 mapping.html 中有一个
    。我应该用
    替换它吗?
  • 不,这不会是问题......我可以在一个 plunker 中告诉你......请秒
  • 我见过你创建的这个 plunkr:plnkr.co/edit/qzI25MKsXBUvw2b45bef?p=preview 这个问题和我的问题非常相似。我还需要在我的 Angular 应用程序上使用大量带有侧边栏的嵌套视图。
  • 正是...这是要走的路
  • 这是 plunker plnkr.co/edit/1aQbOos1aoGhUIAg30r6?p=preview - 它执行上述操作。如果我们去映射 - 子状态 all 被选为默认值。如果我们传递 id,则每次调用 ProjectCtrl 时,因为它的视图被注入到父 ui-view 中(我向该 ctrl 添加了警报以显示该功能......可以关闭;)
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多