2016-04-24 121 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