使用 angularfire2 时如何访问本机 Firebase 对象?
How to get access to native Firebase object when using angularfire2?
我正在结合使用 AngularFire2 (2.0.0-beta.2) 和 angular2 (2.0.0-rc.4)。我想从 Angularfire2 访问本机 firebase 对象(不是 AngularFire 根对象)。
在我的组件中,我想进行如下调用:
firebase.auth().currentUser.updateEmail("user@example.com")
其中 firebase 是本机 firebase 对象,就像您从下面的片段中获得的那样:
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "apiKey",
authDomain: "projectId.firebaseapp.com",
databaseURL: "https://databaseName.firebaseio.com",
storageBucket: "bucket.appspot.com",
};
firebase.initializeApp(config);
</script>
但我不明白如何设置我的 angular2 组件,以便 firebase 对象在其中可见。可能是一个非常简单的问题要解决,但我不知道如何解决——我不是 angular2 专家。我希望有 AngularFire api 来获取对象,但没有。
此外,我尝试这样做的原因是我认为 angularfire2 api 还没有完成(这是可以理解的,因为它仍处于测试阶段)并且我正在尝试解决这个问题。例如我想更新用户的电子邮件地址或密码,或者向他们发送忘记密码的电子邮件。 None 这个功能似乎在 AngularFire2 中还存在,所以我正在尝试使用本机 Firebase 对象来实现。
我将尝试回答我自己的问题。首先让我说,我确定我的答案不是最优雅的解决方案,我还不是 javascript/typescript/angular 专家。但我的回答确实有效——即使我不完全理解。
我使用 angular-cli 来设置我的项目,该项目基于 angular2 和最新的 firebase。显然,当您使用它来设置项目时,会创建一个名为 "firebase" 的全局对象。使其在 angular 2 组件中可见的一种方法是将此声明放在组件中的全局级别(就在导入语句之后和 class 声明之前)。
declare var firebase : any;
执行此操作后,全局 firebase 对象即可在您的组件中使用。
RanchoSoftware 的解决方案对我不起作用,我使用了
import {AngularFireModule} from "angularfire2";
import *as firebase from 'firebase';
在 app.module.ts 文件中的导入中
如果您是在 2016 年 9 月以后阅读本文,这种方法听起来可能不错。
看代码更深入理解:
import { Component, Inject } from '@angular/core';
import { AngularFire, FirebaseApp } from 'angularfire2';
@Component({
templateUrl: 'app/auth/resetpassword.component.html'
})
export class ResetpassComponent {
public auth: any;
constructor(private af: AngularFire, @Inject(FirebaseApp) firebaseApp: any) {
this.auth = firebaseApp.auth()
console.log(this.auth);
}
// formData.value.email = 'your@email.com';
onSubmit(formData) {
if(formData.valid) {
console.log('Sending email verification');
this.auth.sendPasswordResetEmail(formData.value.email)
.then( (response) => {
console.log('Sent successfully');
})
.catch( (error) => {
console.log(error);
})
}
}
}
英文:
- 导入
Inject
和 FirebaseApp
- 在您的组件中可用
- 开始使用所有原生的javascript SDK函数和方法,例如
sendPasswordResetEmail()
执行 auth.
不会自动完成可用的方法和函数,因此您可能需要身边的文档,例如:https://firebase.google.com/docs/auth/web/manage-users
谢谢吗?给@cartant:
我正在结合使用 AngularFire2 (2.0.0-beta.2) 和 angular2 (2.0.0-rc.4)。我想从 Angularfire2 访问本机 firebase 对象(不是 AngularFire 根对象)。
在我的组件中,我想进行如下调用:
firebase.auth().currentUser.updateEmail("user@example.com")
其中 firebase 是本机 firebase 对象,就像您从下面的片段中获得的那样:
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script>
<script>
// Initialize Firebase
// TODO: Replace with your project's customized code snippet
var config = {
apiKey: "apiKey",
authDomain: "projectId.firebaseapp.com",
databaseURL: "https://databaseName.firebaseio.com",
storageBucket: "bucket.appspot.com",
};
firebase.initializeApp(config);
</script>
但我不明白如何设置我的 angular2 组件,以便 firebase 对象在其中可见。可能是一个非常简单的问题要解决,但我不知道如何解决——我不是 angular2 专家。我希望有 AngularFire api 来获取对象,但没有。
此外,我尝试这样做的原因是我认为 angularfire2 api 还没有完成(这是可以理解的,因为它仍处于测试阶段)并且我正在尝试解决这个问题。例如我想更新用户的电子邮件地址或密码,或者向他们发送忘记密码的电子邮件。 None 这个功能似乎在 AngularFire2 中还存在,所以我正在尝试使用本机 Firebase 对象来实现。
我将尝试回答我自己的问题。首先让我说,我确定我的答案不是最优雅的解决方案,我还不是 javascript/typescript/angular 专家。但我的回答确实有效——即使我不完全理解。
我使用 angular-cli 来设置我的项目,该项目基于 angular2 和最新的 firebase。显然,当您使用它来设置项目时,会创建一个名为 "firebase" 的全局对象。使其在 angular 2 组件中可见的一种方法是将此声明放在组件中的全局级别(就在导入语句之后和 class 声明之前)。
declare var firebase : any;
执行此操作后,全局 firebase 对象即可在您的组件中使用。
RanchoSoftware 的解决方案对我不起作用,我使用了
import {AngularFireModule} from "angularfire2";
import *as firebase from 'firebase';
在 app.module.ts 文件中的导入中
如果您是在 2016 年 9 月以后阅读本文,这种方法听起来可能不错。
看代码更深入理解:
import { Component, Inject } from '@angular/core';
import { AngularFire, FirebaseApp } from 'angularfire2';
@Component({
templateUrl: 'app/auth/resetpassword.component.html'
})
export class ResetpassComponent {
public auth: any;
constructor(private af: AngularFire, @Inject(FirebaseApp) firebaseApp: any) {
this.auth = firebaseApp.auth()
console.log(this.auth);
}
// formData.value.email = 'your@email.com';
onSubmit(formData) {
if(formData.valid) {
console.log('Sending email verification');
this.auth.sendPasswordResetEmail(formData.value.email)
.then( (response) => {
console.log('Sent successfully');
})
.catch( (error) => {
console.log(error);
})
}
}
}
英文:
- 导入
Inject
和FirebaseApp
- 在您的组件中可用
- 开始使用所有原生的javascript SDK函数和方法,例如
sendPasswordResetEmail()
执行 auth.
不会自动完成可用的方法和函数,因此您可能需要身边的文档,例如:https://firebase.google.com/docs/auth/web/manage-users
谢谢吗?给@cartant: