简体   繁体   中英

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.

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

Try this. You have to pass the service instance

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

export const eV = va(userService)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM