我有一个简单的初始化程序,它将单例类注入到视图和组件中。当我在
模板中使用该组件时{{component-name}}
然后我可以从组件中访问注入的对象。
如果我从代码创建组件的实例:
comp = App.ComponentNameComponent.create()
注入的对象为空。
注入仅适用于通过模板添加的组件吗?我需要做些什么特别的事情来注入我想要以编程方式管理的组件吗?
答案 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
对象。换句话说,只有在容器创建了上下文对象时,上面的代码才有效。