Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember组件和依赖注入_Javascript_Ember.js_Dependency Injection - Fatal编程技术网

Javascript Ember组件和依赖注入

Javascript Ember组件和依赖注入,javascript,ember.js,dependency-injection,Javascript,Ember.js,Dependency Injection,我有一个简单的初始化器,它将一个单例类注入视图和组件中。当我在模板中使用组件时,如 {{component-name}} 然后我可以从组件访问注入的对象 如果我从代码创建组件的实例: comp = App.ComponentNameComponent.create() 注入的对象为空 注入是否只对通过模板添加的组件起作用?我需要做一些特殊的事情来注入到我想要以编程方式管理的组件中吗?您的组件需要由容器创建,才能正确注入所有内容 var comp=this.container.lookup('

我有一个简单的初始化器,它将一个单例类注入视图和组件中。当我在模板中使用组件时,如

{{component-name}}
然后我可以从组件访问注入的对象

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

comp = App.ComponentNameComponent.create()
注入的对象为空


注入是否只对通过模板添加的组件起作用?我需要做一些特殊的事情来注入到我想要以编程方式管理的组件中吗?

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

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


容器创建的对象将自动将
容器
对象注入其中。换句话说,只有当容器创建了上下文对象时,上面的代码才会起作用

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

comp = container.lookup('component:component-name');
Ember容器查找的每个对象(路由、控制器、视图等)都会自动添加一个
容器
属性。因此,假设您希望在控制器中创建组件的实例,您可以执行以下操作:

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

容器没有公共文档,所以我的建议是。

啊,好的,这是有道理的。查找看起来像是返回一个实例。如何使用此方法将参数传递给组件,就像在模板中传递一样?不管怎样,lookupFactory似乎会给我一个对已注册组件的引用,我可以使用它来实例化选项。