Ember组件和依赖注入

时间:2014-10-24 20:19:34

标签: javascript ember.js dependency-injection

我有一个简单的初始化程序,它将单例类注入到视图和组件中。当我在

模板中使用该组件时
{{component-name}}

然后我可以从组件中访问注入的对象。

如果我从代码创建组件的实例:

comp = App.ComponentNameComponent.create()

注入的对象为空。

注入仅适用于通过模板添加的组件吗?我需要做些什么特别的事情来注入我想要以编程方式管理的组件吗?

2 个答案:

答案 0 :(得分:4)

要使依赖项注入起作用,您必须从容器中查找组件。当您在模板中使用组件时,Ember会执行此操作,但是当您直接实例化一个组件时,它不会发生。因此,如果您希望注入该属性,则应使用如下容器:

comp = container.lookup('component:component-name');

Ember容器(路由,控制器,视图等)查找的每个对象都会自动添加container属性。因此,假设您想在控制器中创建组件的实例,您可以这样做:

comp = this.get('container').lookup('component:component-name');

容器没有公开文档,所以我的建议只是read the source code

答案 1 :(得分:1)

您的组件需要由容器创建才能正确注入所有内容。

var comp = this.container.lookup('component:component-name');

容器创建的对象将自动注入container对象。换句话说,只有在容器创建了上下文对象时,上面的代码才有效。