2016-11-21 11 views
0

私はちょうどAngular 2の新規インストールをインストールしました。Angularjs依存性注入が機能しない

LoginComponent:

import {Component, Inject} from '@angular/core'; 

@Component({ 
    selector: 'app-login', 
    template: ` 
     {{ test.test }} 
    `, 
    styles: [] 
}) 
export class LoginComponent { 
    constructor(@Inject('test') private test){}; 
} 

のApp

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
import { AppComponent } from './app.component'; 
import { LoginComponent } from './login/login.component'; 
import {TestService} from "./test.service"; 

@NgModule({ 
    declarations: [ 
    AppComponent, 
    LoginComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule 
    ], 
    providers: [{provide: 'test', useClass:TestService}], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

TestService

しかし、私はこのようにログイン componentTestServiceと呼ばれるサービスを注入しようとすると、

私はエラーが表示されます。私は間違って

error_handler.js:47EXCEPTION: Error in ./AppComponent class AppComponent - inline template:1:25 caused by: Cannot read property 'name' of undefined 

何をしているのですか?

+0

エラーメッセージは、ご質問のコードに関連していないようです。 'AppComponent'に' name'をどこでどのように使っていますか? –

+0

ありがとうございました。あなたが言ったように、 '' 'AppComponent''に間違いがありました。 – Jamie

答えて

3

あなたはElvis Operatorを使用しているはずです。ただtestプロパティがtestに尋ねることを確認する。現在、最初の変更検出が発生すると、test.testはビューのバインディングを評価しようとします。最初はtestが定義されていないため、test.testは失敗します。

{{ test?.test }} 
+0

プロバイダキーとしてのAFAIK文字列は問題ありません。通常、「OpaqueToken」を使用するのは良い考えですが、必須ではありません。 –

+0

@GünterZöchbauerあなたのヘッドアップに感謝、私は間違ったトラックに完全にあった、私は確かに今言うことができます。それは拘束力のある評価に関連しています。 –

+0

私はまだ 'name'がアクセスされている' 'name''プロパティを読み取れません。あなたの提案が正しければ、 'test 'というプロパティを読むことができませんが、質問の中で提供されているコードでは間違っていると思います。 –

関連する問題