Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to inject a service into a constant in angular

I'm trying to export a constant in angular and I need to set a key whose value will be returned from a service. I tried with following code:

This is my user-config.ts file:

export const USER_CONFIG = {
    username: new UserService().getUsername()
}

And this is my UserService file that I would like to be injected in constant:

 export class UserService{
        constructor(someOtherService: SomeOtherService)
        getUsername() {
            return this.someOtherService.getDetails('some/url')
        }
    }

I'm not able to work around this problem. Need help.

like image 440
Kedar Udupa Avatar asked Aug 30 '19 11:08

Kedar Udupa


1 Answers

Constants in Angular may be constructed using InjectionToken:

export const USER_CONFIG = new InjectionToken('User Configuration', {
  factory: () => {
    return {
      // You can inject the UserService to get the username
      username: inject(UserService).getUsername()
    }
  }
});

Since the constant is an injection token, it can be injected in other parts of your application:

export class AppComponent {

  constructor(@Inject(USER_CONFIG) config) {
    console.log(config.username)
  }
}

StackBlitz Example

like image 97
Sam Herrmann Avatar answered Oct 27 '22 03:10

Sam Herrmann