Angular 如何注入服务于某些数据?
我正在使用angular 9,我需要将配置数据注入服务:Angular 如何注入服务于某些数据?,angular,Angular,我正在使用angular 9,我需要将配置数据注入服务: @Injectable({ providedIn: 'root' }) export class AuthService { private auth: any; constructor(private authConfig: AppConfig) { } } 我需要将AppConfig注入到服务中。我如何才能做到这一点?如果AppConfig是一项服务,您应该以您的方式轻松地将其注入AuthService。否则,如果
@Injectable({
providedIn: 'root'
})
export class AuthService {
private auth: any;
constructor(private authConfig: AppConfig) {
}
}
我需要将
AppConfig
注入到服务中。我如何才能做到这一点?如果
AppConfig
是一项服务
,您应该以您的方式轻松地将其注入AuthService
。否则,如果AppConfig
不是服务,并且Angular无法注入它(因为Angular无法管理它),那么您可能需要将AppConfig
中的字段设置为静态,或者手动在AuthConfig
中安装,或者将其设置为单例,甚至可以将其添加到AppModule
中的providers部分。但是我认为你应该让Angular来管理它,如果它不是一个服务
,那么把它添加到提供者
如果AppConfig
是一个服务
,你应该用你的方式轻松地将它注入AuthService
。否则,如果AppConfig
不是服务,并且Angular无法注入它(因为Angular无法管理它),那么您可能需要将AppConfig
中的字段设置为静态,或者手动在AuthConfig
中安装,或者将其设置为单例,甚至可以将其添加到AppModule
中的providers部分。但我认为你应该让Angular来管理它,如果它不是一项服务
,请将其添加到提供商中。使用静态数据
对于简单的基于对象的配置数据`{url:“/login”,…},我建议您使用一个简单的JSON文件。您可以在中阅读如何将JSON文件导入角度项目
2。使用专用的typescript类
要利用typescript的优点,您可以声明一个简单的类文件,并将您的配置收集为静态属性,绑定到类:
export class AppConfig{
public static xy = "..."
}
然后使用myVariable=AppConfig.xy
导入它(别忘了导入它)
3。使用environment.ts
这已经在Angular中,您可以使用基于环境的配置,阅读有关environment.ts
和environment.prod.ts
的更多信息。这与第二点非常相似,但是如果运行ngbuild
或ngbuild--prod
,则该文件将替换为不同的文件
4。运行时配置
在理解了前面示例的优缺点之后,您可能会想,我们是否只能在运行时提供配置,可能是基于一些动态规则?是的,这是可能的,但是有点复杂,但是您可以在模块启动之前注入配置,甚至可以通过使用provide:APP\u INITIALIZER
,从异步调用注入配置。阅读更多关于它的信息。使用静态数据
对于简单的基于对象的配置数据`{url:“/login”,…},我建议您使用一个简单的JSON文件。您可以在中阅读如何将JSON文件导入角度项目
2。使用专用的typescript类
要利用typescript的优点,您可以声明一个简单的类文件,并将您的配置收集为静态属性,绑定到类:
export class AppConfig{
public static xy = "..."
}
然后使用myVariable=AppConfig.xy
导入它(别忘了导入它)
3。使用environment.ts
这已经在Angular中,您可以使用基于环境的配置,阅读有关environment.ts
和environment.prod.ts
的更多信息。这与第二点非常相似,但是如果运行ngbuild
或ngbuild--prod
,则该文件将替换为不同的文件
4。运行时配置
在理解了前面示例的优缺点之后,您可能会想,我们是否只能在运行时提供配置,可能是基于一些动态规则?是的,这是可能的,但是有点复杂,但是您可以在模块启动之前注入配置,甚至可以通过使用provide:APP\u INITIALIZER
,从异步调用注入配置。阅读更多信息您可以创建一个服务并使用可注入装饰器装饰,然后将provideIn设置为root(这将使服务成为单例)
AppConfig
@可注入({
提供于:“根”
})
导出类AppConfig{
url:string;
港口:编号;
}
然后,您可以将服务注入AppNode并设置属性
。。。
导出类AppModule{
构造函数(config:AppConfig){
config.url='127.0.0.1';
config.port=3000;
}
}
之后,将appConfig注入应用程序中的任何组件和服务,您只需创建一个服务并使用可注入装饰器进行装饰,然后将provideIn设置为root(这将使服务成为单例)
AppConfig
@可注入({
提供于:“根”
})
导出类AppConfig{
url:string;
港口:编号;
}
然后,您可以将服务注入AppNode并设置属性
。。。
导出类AppModule{
构造函数(config:AppConfig){
config.url='127.0.0.1';
config.port=3000;
}
}
之后,将appConfig注入到应用程序中的任何组件和服务中,一个选项是使用静态json文件
在应用程序的src/assets/
文件夹中创建一个config.json
文件,其中包含您的配置李>
使用HTTP检索服务中的配置
auth.service.ts
从'@angular/core'导入{Injectable};
从'@angular/common/http'导入{HttpClient};
@可注射()
导出类身份验证服务{
构造函数(专用http:HttpClient){
this.http.get('/assets/config.json').subscribe(数据=>{
控制台日志(数据);
});
}
}
工作示例:一个选项是使用静态json文件
创建config.json
文件c
export const environment = {
production: true
};
import {AppConfig} from '../app/models/app-config';
export const environment = {
production: false,
authConfig: {
clientID: 'oidc-client',
// stuff or other
} as AppConfig
};
import {Injectable} from '@angular/core';
import {environment} from '../../environments/environment';
@Injectable({
providedIn: 'root'
})
export class AuthService {
private authConfig = environment.authConfig;
constructor() {
}
}