2016-08-02 100 views
2

提供在RC4中被弃用。在Angular 2中提供常量

它之前,我可以这样做:

provide("API_URL", {useValue: "address"}) 

我尝试这样:

{ 
    provide: "API_URL", 
    useValue: "address" 
} 

但这不工作。我发现了几个例子here,但常量上没有例子。

+0

在你提供的链接,有'{提供:TITLE,useValue: '每月英雄'}' – hendrix

+0

不知道你如何使用'{ 提供: “API_URL”, useValue:“address” }'但它应该也可以。 – estus

+0

@estus如果它工作我不会写它=) – Illorian

回答

7

你必须使用这个OpaqueToken类:

tokens.export.ts

import { OpaqueToken } from '@angular/core'; 

export const API_URL = new OpaqueToken('API_URL'); 
export const OTHER_TOKEN = new OpaqueToken('OTHER_TOKEN'); 

UPDATE - 因为角4.0 OpaqueToken已过时,请使用InjectionToken

import { InjectionToken } from '@angular/core'; 

export const API_URL = new InjectionToken<string>('API_URL'); 
export const OTHER_TOKEN = new InjectionToken<string>('OTHER_TOKEN'); 

main.ts

{ 
    provide: API_URL, 
    useValue: "address" 
} 
+0

It Component I should use: constructor(@Inject(“API_URL”)private apiUrl){} ? – Illorian

+1

@Illorian'@Inject(API_URL)private apiUrl)'。应该导入“API_URL”变量。使用不透明令牌的原因是它们是独一无二的。 – estus

+1

可能还想显示'InjectionToken',因为'OpaqueToken'在4+ – ChrisG

0

我在我的应用程序做到了这一点,如:

export class AppSettings { 
    public static get API_ENDPOINT(): string { return 'http://localhost:3003'; } 
} 

包括(导入类和使用变量)在应用程序中需要的地方。

+0

我知道这个解决方案,但我想用DI =) – Illorian

+0

因为它的变量将用于其他代表并用作子模块 – Illorian

+0

@Illorian你有没有找到一种方法?我试图做同样的事情(子模块的常量) – omer

相关问题