gpt4 book ai didi

angular - Angular 8 中的这些创建服务方法有什么区别?

转载 作者:行者123 更新时间:2023-12-04 10:22:45 24 4
gpt4 key购买 nike

我是 Angular 的新手,我有一个问题:

方法1:

@Injectable()

export class classA {
constructor(
private service1: Service1,
private service2: Service2) {
}
}

在 app.module 中
providers: [
{
provide: classA ,
useFactory: authServiceFactory,
deps: [ RoleService, LogService ]
}
]

export function authServiceFactory(roles: RoleService, log: LogService) {
const service = new AuthenticationService(roles, log);
return service;
}

方法2:
@Injectable({
providedIn: 'root'
})
export class classA{
constructor(
private service1: Service1,
private service2: Service2)
}



@Injectable({
providedIn: 'root'
})

export class Service1{
}


@Injectable({
providedIn: 'root'
})

export class Service2{
}

app.module 中没有提供者。

我想知道这些方法有什么不同。我已经尝试过方法 1 和方法 2 一样有效。

最佳答案

区别在于服务的范围

这会将相同的服务实例注入(inject)所有组件。这被称为单例:

@Injectable({
providedIn: 'root'
})
export class MyService {
}

这会将服务的相同实例注入(inject)所有组件 在那个模块 :
@NgModule({
providers: [ MyService ]
})
export class MyModule {}

如果您只有一个模块 - AppModule - 这两种方法没有区别 - 它们是等价的。建议将所有服务声明为 providedIn: 'root'在这种情况下。

如果您有多个模块,您可以声明一个单例服务,并且还可以通过在模块 providers: [] 中覆盖它来选择在其中一个模块中提供特定于模块的版本。 .

举个例子:
@Injectable({ providedIn: 'root' })
export class MyService {
}

@NgModule({
declarations: [
ComponentA,
ComponentB
]
})
export class AppModule { }

@NgModule({
declarations: [
FeatureComponentA,
FeatureComponentB
],
providers: [
MyService
]
})
export class MyFeatureModule { }


@NgModule({
declarations: [
OtherComponentA,
OtherComponentB
]
})
export class MyOtherModule { }
ComponentA , ComponentB , OtherComponentA , OtherComponentB都会收到相同的 MyService 实例当它被注入(inject)时。
FeatureComponentAFeatureComponentB将收到 MyService 的第二个实例因为提供者是在声明组件的模块中声明的。

关于angular - Angular 8 中的这些创建服务方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60771021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com