Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Angular 当我们将服务名称作为参数传递给构造函数时,在提供者中声明服务名称_Angular - Fatal编程技术网

Angular 当我们将服务名称作为参数传递给构造函数时,在提供者中声明服务名称

Angular 当我们将服务名称作为参数传递给构造函数时,在提供者中声明服务名称,angular,Angular,当我们将服务名称作为参数传递给组件构造函数时,为什么要在提供者中声明服务名称 import {xComponent} from './x' @Component({ providers : [xComponent] }) export class xyz{ constructor(public x : xComponent){} } 综上所述,如果我们在构造函数中传递相同的xComponent,为什么要在提供者中声明xComponent呢。这不是冗余吗。因为提供和注入是两件不同的事情 提供指定

当我们将服务名称作为参数传递给组件构造函数时,为什么要在提供者中声明服务名称

import {xComponent} from './x'
@Component({
providers : [xComponent]
})
export class xyz{
constructor(public x : xComponent){}
}

综上所述,如果我们在构造函数中传递相同的xComponent,为什么要在提供者中声明xComponent呢。这不是冗余吗。

因为提供和注入是两件不同的事情

提供指定创建服务实例的位置和方式以及它的作用域


注入是指指定一个构造函数参数,其中需要传入一个服务(或其他可注入的)实例。

因为提供和注入是两件不同的事情

提供指定创建服务实例的位置和方式以及它的作用域


注入是指指定一个构造函数参数,其中需要传入一个服务(或其他可注入的)实例。

您所说的
提供者是什么意思?它是
@组件
提供者还是
@NgModule
提供者

如果
@Component
,那么它就不再是必需的,如果您在构造函数参数上使用
@Inject
注释(我很确定它在beta版中是必需的,但在发布后不久它就被删除了)。然而,在少数特殊情况下仍然可以使用这种方法(例如,如果您需要动态依赖关系,那么您可以获取
Injector
的本地实例,该实例包含
提供程序中列出的服务/类,但这绝对不是您的情况。或者您可以列出需要提供的所有服务并删除
@Injector
注释).但你仍然可以在互联网上找到大量过时的例子


如果
@NgModule
-它仍然是必需的-这是
Injector
获取DI可用类列表的入口点。如果您不在这里提供服务,DI无法通过
@Injector
在构造函数中通过
解决。您所说的
提供者是什么意思?是
@Component
提供者还是
@NgModule
提供程序

如果
@Component
,那么它就不再是必需的,如果你在构造函数参数上使用
@Inject
注释(我很确定它在beta版中是必需的,但在发布后不久它就被删除了)。然而,在少数特殊情况下仍然可以使用这种方法(例如,如果您需要动态依赖关系,那么您可以获取
Injector
的本地实例,该实例包含
提供程序中列出的服务/类,但这绝对不是您的情况。或者您可以列出需要提供的所有服务并删除
@Injector
注释).但你仍然可以在互联网上找到大量过时的例子


如果
@NgModule
-仍然需要-这是
Injector
获取可用于DI的类列表的入口点。如果您不在此处提供服务,则无法通过
@Injector

在构造函数中解析DI为什么会被否决??为什么会被否决??测试版(发布前的最后一个版本除外)没有模块,因此所有提供程序都位于
@Component()
@Directive()中
。现在提供程序可以注册模块和指令,它定义了提供程序创建的实例的范围。如果我不希望我的服务类对整个应用程序可用,我不应该在NgModule中声明,我应该在单个组件中声明。我在问这个问题。谢谢@GünterZöchbauer@praveen-然后更新你的应用程序用代码示例和适当的问题描述提问,而不是强迫社区猜测您的问题是什么Beta(除了发布前的最后一个)没有模块,因此所有提供程序都在
@Component()
@Directive()中
。现在提供程序可以注册模块和指令,它定义了提供程序创建的实例的范围。如果我不希望我的服务类对整个应用程序可用,我不应该在NgModule中声明,我应该在单个组件中声明。我在问这个问题。谢谢@GünterZöchbauer@praveen-然后更新你的应用程序用代码示例和适当的问题描述提问,而不是强迫社区猜测你的问题是什么如果我理解正确..如果你在provider中声明服务,angular将在那里创建一个新实例并注入构造函数…如果没有,它将进入层次结构,从那里获取一个实例并注入构造函数他的回答:)我本来想把这个链接起来的:,这和你的答案很吻合,就像我很快解释的链接一样:)@praveen如果我理解正确的话。。如果你在provider中声明服务,angular将在那里创建一个新实例并注入构造函数。。。如果没有,它将进入层次结构,从那里获取一个实例并注入构造函数??这个答案:)我想把这个链接起来:,这和你的答案很吻合,就像我很快解释的链接一样:)@praveen