2016-04-24 123 views
3

我正在嘗試將Firebase整合到我的Angular 2應用程序中,但我一直收到此錯誤Firebase is not a constructor。以下是我所做的:Firebase不是構造函數

  1. 安裝使用火力鮑爾
  2. 引用腳本中的index.html。
  3. 安裝火力環境分型
  4. 創建一個火力地堡服務
  5. 只要它通過bootstrap()
  6. 有它在一個組件注入

FirebaseService.ts

@Injectable() 
export class FirebaseService 
{ 
    dataRef: Firebase; 
    constructor() { 
     this.dataRef = new Firebase('https://boiling-inferno-1117.firebaseio.com/votes'); 
    } 
} 

boot.ts

bootstrap(App, [HTTP_PROVIDERS, 
    ROUTER_PROVIDERS, 
    IdentityService, 
    ApiService, 
    UrlService, 
    provide(FirebaseService, {useValue: new FirebaseService()}) 
]) 
.catch(err => console.error(err)); 

app.ts

@Component({ 
    selector: 'app', 
    templateUrl: 'app/app.html', 
    directives: [AuthRouterOutlet, ROUTER_DIRECTIVES] 
}) 
export class App {   
    constructor(private firebase:FirebaseService) 
    { 

    }   
} 

Systemjs配置:

System.config({ 
    defaultJSExtensions: true, 
    map: { 
     'jquery': 'vendors/js/jquery', 
     'firebase': 'vendors/js/firebase' 
    }, 
    packages: { 
     angular2: { defaultExtension: false }, 
     rxjs: { defaultExtension: false } 
    } 
}); 

和進口Firebase象下面這樣:

import * as Firebase from 'firebase';

上我能做些什麼來解決這個問題的任何建議非常感謝。

+0

我們可以假設:提供(FirebaseService,{useValue:new FirebaseService()})是一個錯字嗎?因爲你應該使用提供者,並且之後需要一個數組。提供商:[FirebaseService] –

+0

您是否也可以提供您的SystemJS配置?還有您導入Firebase課程的方式?謝謝! –

+0

@ R.Richards也試過。同樣的錯誤。 – lbrahim

回答

1

我將配置火力地堡這樣:

System.config({ 
    map: { 
    firebase: '/node_modules/firebase/lib/firebase-web.js', 
    (...) 
    }, 
    (...) 
}); 

,並在打字稿文件中導入這樣的:

import * as Firebase from 'firebase'; 

見Angularfire2的文檔瞭解詳情:

+0

我有一個gulp任務,將'firebase-web.js'文件從'node_modules'文件夾複製到我的'dist/vendors/js'目錄中。所以它看起來與你展示的基本相同。我錯了嗎? – lbrahim

+0

事實上,你指定的文件夾不是js文件到你的SystemJS配置;-)你需要映射js文件。 –

+0

'vendors/js/firebase'這裏firebase是文件名,比如firebase.js。因爲,我有'defaultJSExtensions:true'啓用了'.js'似乎是附加給我的。這就是爲什麼從我的配置jquery工作得很好。 – lbrahim