首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解决控制器问题?

解决控制器问题?
EN

Stack Overflow用户
提问于 2014-09-04 22:39:30
回答 1查看 70关注 0票数 0

我想将控制器中定义的功能公开给子控制器。实质上,这是:

代码语言:javascript
运行
复制
.state('parent', {
  controller: 'ParentCtrl',
})

.state('parent.child', {
  controller: 'ChildCtrl', // how to inject ParentCtrl?
})

当然,那是不可能的。那么解决问题呢?让我们试试:

代码语言:javascript
运行
复制
.state('parent', {
  resolve: {
    ParentCtrl: 'ParentCtrl',
  }
})

.state('parent.child', {
  resolve: {
    ChildCtrl: 'ChildCtrl', // just declare ParentCtrl as injected dependency
  }
})

但是,如果ParentCtrl或ChildCtrl是用angular.controller声明的角控制器,则这是行不通的

http://plnkr.co/edit/ggHkZTkQJSsL24sm7X2V

如果我们给他们提供服务呢?

http://plnkr.co/edit/Sl1qxWcub6bvXZfPEvHE

嘿,真管用!但是,如果我想向它注入一个已解决的依赖呢?嗯,那不管用。无论如何,一次只能存在一个服务实例,并且已解析的依赖项不在创建它的范围内:

http://plnkr.co/edit/gsvJlJSpx2WEB1s6l7NU

不幸的是,ui-路由器无法解析控制器。似乎唯一的解决方案是将控制器定义为angular.constant,然后将其插入到模块的config中,然后构造具有已解析依赖项的控制器:

http://plnkr.co/edit/8gGKNxjpv2OgS0obNvVi

还有更好的选择吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-05 02:08:56

实际上,您可以在解析期间注入$controller服务并返回控制器的实例。原因是您不能只按原样注入控制器。

例子:-

代码语言:javascript
运行
复制
  ParentCtrl: function($controller){
    return $controller('ParentCtrl');
  } 

演示

但是,如果它是一个非常常用的功能,那么它们可能应该驻留在服务中。另外一件事是使用Controller As语法,您仍然可以使用别名在子控制器中访问它们。关于这里有一个很好的解释

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25676056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档