Kedar Udupa
Kedar Udupa

Reputation: 554

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.

Upvotes: 13

Views: 9209

Answers (2)

Sam Herrmann
Sam Herrmann

Reputation: 6976

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

Upvotes: 7

RateM
RateM

Reputation: 291

Try this. You have to pass the service instance

const va = (userService : UserService) => {
    return {
        username : userService.getUsername()
    }
}

export const eV = va(userService)

Upvotes: 0

Related Questions