2016-04-04 11 views
1

typescriptのangular2では、文字列パラメータまたは偶数パラメータをコンストラクタで次のように渡す必要があります。 コンストラクタ(_para:string){} angle2のコンストラクタから文字列パラメータまたは数値を渡すには

NoProviderError {message: "No provider for String! (App -> String)", stack: "Error: DI Exception↵ at NoProviderError.BaseExc…ularjs.org/2.0.0-beta.8/angular2.dev.js:11284:19)"

私は_para削除する場合:エラーとデバッガが私に言っておくここ ....文字列を、それが動作しますDemoeはplnkrである:

http://plnkr.co/edit/t7serY3L6LtvzYc5xHtL?p=preview

and here is the code : 
//our root app component 
import {Component} from 'angular2/core' 

@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 


    </div> 
    `, 
    directives: [] 
}) 
export class App { 
    constructor(_para:string) { 

    this.name = 'Angular2' 
    } 
} 
+1

このパラメータをどのように使いたいか興味深いでしょう。コンポーネントインスタンスは、Angularによって作成されます。 Angularは何を渡すべきかを知るべきですか?私の答えを見てください、しかし、これがあなたが望むものなのかどうかは分かりません。 –

答えて

2

Angulars Dependency Injection(DI)によって作成されたコンポーネントの場合、プロバイダを見つけることを試み、コンストラクタパラメータのタイプをキーとして使用してそのコンポーネントを検索します。

string,numberbooleanObjectのようなプリミティブ型はキーとして機能しません。このような「汎用」タイプを使用する場合は、人工的なキーが必要です。 DIは、タイプに加えて文字列またはOpaqueTokenをキーとしてサポートしています。そのようなアーティファクトキーの場合、@Inject()デコレータを使用する必要があります。

bootstrap(MyApp, [provide('para': {useValue: 'Hello World!'})]); 

@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 


    </div> 
    `, 
    directives: [] 
}) 
export class App { 
    constructor(@Injet('para') _para:string) { 

    this.name = 'Angular2' 
    } 
} 
関連する問題