Angular 2中全局可见服务的问题

时间:2016-07-28 12:56:36

标签: typescript angular

我想要提供服务,无需导入组件即可看到。

我的自举功能:

export function main(initialHmrState?: any): Promise<any> {
  console.log(APP_PROVIDERS);
  return bootstrap(App, [
    ...PLATFORM_PROVIDERS,
    ...ENV_PROVIDERS,
    ...APP_PROVIDERS
  ])
  .then(decorateComponentRef)
  .catch(err => console.error(err));
}

应用提供商定义:

export * from './app.component';
export * from './user.state';
export * from './app.service';

import { UserState } from './user.state';
import { AppState } from './app.service';

// Application wide providers
export const APP_PROVIDERS = [
  UserState,
  AppState
];

我不能在组件构造函数中调用它

 constructor( private userState: UserState ) {} 

我如何解决我的问题?

2 个答案:

答案 0 :(得分:1)

通过导入它或使用字符串标记或OpaqueToken和`@Inject()

export const APP_PROVIDERS = [
  {provide: 'UserState', useClass: UserState},
  AppState
];
constructor(@Inject('UserState') private userState: any ) {} 

答案 1 :(得分:1)

分为两部分:

  • 使用类型
  • 定义提供程序名称
  • 使用注射类型

在这两种情况下,您都需要导入相应的类型。否则,他们将无法解决......

请注意,使用类型进行依赖项注入不是必需的。您最终可以使用OpaqueToken s:

export const SOME_TOKEN = new OpaqueToken('sometoken');
let provider = { provide: token, useClass: UserState };

并使用它:

 constructor( @Inject(SOME_TOKEN) private userState: UserState ) {} 

但在这种情况下,您还需要导入不透明令牌......