2016-06-21 17 views
0

私はAngular2で始まったばかりです。私はAngular2のウェブサイト上のすべての先生を読んで、私のプロジェクトに取り組み始め、すぐに立ち往生しました。Angular2、コンストラクタDI例外をスローする

ここにソースがあります。

app.ts:

import { Component }   from '@angular/core'; 
import { bootstrap }   from '@angular/platform-browser-dynamic'; 
import { ApiClient }   from './services/api-client'; 

@Component({ 
    selector: 'app', 
    template: 'Hello', 
    providers: [ApiClient] 
}) 
export class AppComponent { constructor(private apiClient: ApiClient) { } } 

bootstrap(AppComponent); 

API-client.ts: 例外:エラー:キャッチされない(約束で)

import { Injectable } from '@angular/core' 

@Injectable() 
export class ApiClient { 
    public login(username: string, password: string, rememberMe: boolean) : boolean { 
    if (username == 'testuser' && password == 'password') 
     return true; 
    else 
     return false; 
} 
} 

そして、このシンプルなソースコードは私に非常に奇妙な例外を提供します:TypeError:depがnull

コンストラクタDIを削除すると例外がなくなります。

私は過去4時間それに苦しんでおり、それを修正するためのアイデアはありません。別の奇妙なことは、例外メッセージが役に立たないということです。

ありがとうございました。私はこの言及コンストラクタDIにより

UPDATE

constructor(private apiClient: ApiClient) { } 

アップデート2

I成分({})と注射()を交換したと今では完全に動作。どういう意味ですか?壊れたローカルAngular2ソースや何らかの設定ミス?

+0

なぜこれがうまくいかないのか、私はいくつか説明しました。私があなたの質問に欠けているのは、あなたが何を期待しているかです。 Angular DIは薄い空気から 'password'、' username'と 'rememberMe'を作成できません;-)。あなたはどこから来ることを望んでいますか? –

+0

私はこのメソッドを削除したが、まだこの例外が発生しています –

+0

どのような方法ですか? 。 。 –

答えて

0

固定!!!

何らかの理由で「node_modules \ es6-shim」が見つかりませんでした。

Firefoxがなぜ私にそれについて通知していないのかわかりません。 Chromeでウェブアプリケーションが開始され、JS参照が見つからないという警告が表示されました。

"npm install es6-shim"を実行して、期待どおりに動作します!

0

試してください:あなたは1を持っている場合

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

... 
    export class AppComponent { 

     constructor(@Inject(ApiClient) apiClient: ApiClient) { } 
    } 

はあなたApiClientクラスのコンストラクタを示す価値があるだろう。

+0

この '@Inject()'が必要な場合、おそらくあなたのコードに何か間違いがあります。 '@Inject()'に渡された型がパラメータ自体の型と同じなら '@Inject()'は冗長です。 –

+0

注射が助けになりました。ありがとう。しかし、これは適切な修正ではなく、ちょっとした回避策だと思います。 –

+0

私はInjectable()をComponent({})に置き換えました。どういう意味ですか?壊れたローカルAngular2ソースや何らかの設定ミス? –

関連する問題