2016-06-21 128 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; 
} 
} 

而這個簡單的源代碼給了我一個很奇怪的例外: EXCEPTION:錯誤:未捕獲的(以諾) :TypeError:dep爲空

如果我刪除構造函數DI,則異常消失。

我一直在爲它奮鬥了過去4小時,並沒有任何想法來解決它。另一個奇怪的是,異常消息是無用的。

謝謝。

UPDATE

通過構造DI我提到了這一點:

constructor(private apiClient: ApiClient) { } 

更新2

我與組件更換注射()({})和現在的作品完美。這是什麼意思?破碎的本地Angular2資源或某種錯誤配置?

+0

我發佈了一些解釋,爲什麼這不起作用。我在你的問題中缺少的是你期望發生的事情。角度DI不能從空氣中創建'密碼','用戶名'和'rememberMe' ;-)。你想要或希望他們來自哪裏? –

+0

我已經刪除了這個方法,但仍然得到這個異常 –

+0

什麼方法? 。 。 –

回答

0

固定!!!

由於某種原因「node_modules \ es6-shim」丟失!

我不知道爲什麼Firefox沒有通知我這件事。 在Chrome中啓動了Web應用程序,並注意到有關缺少JS引用的警告。

執行「npm install es6-shim」,現在按預期工作!

0

嘗試:

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

... 
    export class AppComponent { 

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

可能是值得你展示你ApiClient類的構造函數,如果你有一個。

+0

如果這個'@Inject()'是必須的,那麼在你的代碼中可能有其他錯誤。如果傳遞給'@Inject()'的類型與參數本身的類型相同,'@Inject()'是多餘的。 –

+0

注入幫助。謝謝。不過,我想這是有點解決方法,而不是正確的修復 –

+0

我用組件({})替換了Injectable(),現在它工作得很完美。這是什麼意思?破碎的本地Angular2資源或某種錯誤配置? –

相關問題