11

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.

Kedar Udupa
  • 392
  • 7
  • 22

2 Answers2

4

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

Sam Herrmann
  • 4,201
  • 3
  • 18
  • 36
0

Try this. You have to pass the service instance

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

export const eV = va(userService)
RateM
  • 171
  • 12