我正在尝试获取对文档 UID 的引用,以便我可以通过其 UID 在项目中的其他位置使用该文档。根据文档,我正在使用 AngularFire2 (v5) 执行以下操作:
var ref= this.afs.collection(placeToAdd).doc();
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:“预期 1 个参数,但得到 0”。它希望我在 doc() 方法中添加一个参数。所以,我这样做:
var ref= this.afs.collection(placeToAdd).doc(thing);
Run Code Online (Sandbox Code Playgroud)
然后我设置我的 Firebase 对象:
ref.set({
item1: 'value 1',
item2: 'value 2',
item3: 'value 3'
});
Run Code Online (Sandbox Code Playgroud)
现在如何获取引用的 Firestore 生成的 UID?
我正在尝试使用 angularFire 2 在 firebase 中登录并创建帐户。电话登录有一个运行良好的 reCaptcha 字段。使用电子邮件和密码创建帐户也工作正常,但我想在创建表单(如电话登录功能)中使用 reCaptcha,但我没有找到方法,可以在 angularFire 中使用电子邮件和密码创建帐户并使用 reCaptcha 验证。我也尝试过文档,但没有这样的。如果 Angular Fire 2 中有类似的选项,请帮助我。我正在使用"angularfire2": "^4.0.0-rc.1",
我目前在 youtube 上关注了有关具有 firebase 功能的 SSR 的视频。这似乎很完美。现在我正在尝试向我的 ssr 样板应用程序添加一些附加功能。我想添加 Firebase firestore 支持,以便我可以从 firebase firestore 获取数据。我收到此错误ERROR { Error: Uncaught (in promise): TypeError: app.firestore is not a function,并且这只发生在函数(服务器)中。在前端检索数据,但由于功能(服务器)错误,SSR 部分无法工作。我似乎找不到任何解决方案。我的代码可以在这里查看:Github_Repository
我看不出我在这里缺少什么,希望发布这个问题会有所帮助。
谢谢。
第一次尝试
import { Timestamp } from '@firebase/firestore-types';
Run Code Online (Sandbox Code Playgroud)
那么如何创建一个 Timestamp 对象呢?
var now: Timestamp = ???
var now: Timestamp = Timestamp.now() //Module not found: Error: Can't resolve '@firebase/firestore-types'
Run Code Online (Sandbox Code Playgroud) 我@angular/fire在我的项目中使用 firebase。为了测试与 firebase 服务的集成,我firebase emulators: start在命令行中运行。在为 angular 应用程序提供服务ng serve --open时,每当我进行更改并保存任何文件时,页面都会重新加载,并且我会自动退出 Firebase 帐户。这仅在使用 Firebase 模拟器时发生。我不知道这是否是@angular/firefirebase auth 模拟器的问题。这非常令人沮丧,因为我需要登录 angular 应用程序中的每个文件更改。
我的 App.module.ts 对提供者有以下配置。每当我登录
providers: [
{
provide: USE_AUTH_EMULATOR,
useValue: environment.useEmulators ? ["localhost", 9099] : undefined,
},
{
provide: USE_DATABASE_EMULATOR,
useValue: environment.useEmulators ? ["localhost", 9000] : undefined,
},
{
provide: USE_FIRESTORE_EMULATOR,
useValue: environment.useEmulators ? ["localhost", 8080] : undefined,
},
{
provide: USE_FUNCTIONS_EMULATOR,
useValue: environment.useEmulators ? ["localhost", 5001] : undefined,
},
],
Run Code Online (Sandbox Code Playgroud)
编辑 1:我通过注入AngularFireAuth …
javascript firebase-tools firebase-authentication angularfire2 angular
我想将@angular/fire添加到我的 Nx 工作区(Angular 应用程序)中。
我试图与最佳实践保持一致,但是,官方文档中没有任何关于将此库添加到工作区中的内容。
或者我错过了什么?
在应用程序模块中?(在采用 Nx 之前我就是这样做的)
或者一个lib模块?(在我看来这更接近 Nx 哲学)
如果答案是“一个 lib 模块”
如此严格地遵循最佳实践(命名约定等)可能看起来很愚蠢,但我真的想以正确的方式做事。
我最近升级到了最新版本的@angular/fire,一切工作正常,但现在我已经从 compat 库迁移出去,现在我陷入了这个问题。我在以下代码中收到此错误:
Firebase: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp()。
// ...
import {getAuth, provideAuth} from '@angular/fire/auth';
import {getFirestore, provideFirestore} from '@angular/fire/firestore';
import {initializeApp, provideFirebaseApp} from '@angular/fire/app';
// ...
@NgModule({
// ...
providers: [
// ...
provideFirebaseApp(() => initializeApp(window['firebase_config'])),
provideFirestore(() => getFirestore()),
provideAuth(() => getAuth()),
// ...
],
// ...
})
export class ApModule {
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
Error: Firebase: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp() (app/no-app).
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的离子应用程序使用 Angular 12 和 Firebase 最新的模块化 SDK。我正在使用实时数据库,很难找到我需要在数据处理部分进行的更改。
下面是我的新 app.module.ts
import { AngularFireModule } from '@angular/fire/compat';
import { AngularFireDatabaseModule, AngularFireDatabase } from '@angular/fire/compat/database';
imports: [
AngularFireModule.initializeApp(firebaseConfig),
AngularFireDatabaseModule,
]
Run Code Online (Sandbox Code Playgroud)
数据服务文件如下所示
import { AngularFireDatabase } from '@angular/fire/compat/database';
constructor(public db: AngularFireDatabase) { }
getVendor(){
return new Promise((resolve, reject) =>
{
this.db.object("config").valueChanges().subscribe(
(res) => {
//console.log(res);
resolve(res)},
(err) => {
console.log("hitting error:" + err); reject(err)
}
)
})
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行时我看到以下错误
[error] - ERROR {"name":"NullInjectorError","ngTempTokenPath":null,"ngTokenPath":["CoreService","SBDataService","AngularFireDatabase","InjectionToken angularfire2.app.options","InjectionToken angularfire2.app.options","InjectionToken angularfire2.app.options"]}
Run Code Online (Sandbox Code Playgroud)
我的 package.json 是
{
"name": "xxx",
"scripts": { …Run Code Online (Sandbox Code Playgroud) firebase ionic-framework firebase-realtime-database angularfire2 angular
我已经设法让 @angular/fire 在 Angular 独立应用程序中工作,但我正在尝试像过去一样打开离线功能,现在我看到它已enableIndexedDbPersistence被标记为已弃用。它建议如下:
该功能将在未来的主要版本中删除。相反,将 FirestoreSettings.cache 设置为 IndexedDbLocalCache 的实例以打开 IndexedDb 缓存。当 FirestoreSettings.cache 已指定时调用此函数将引发异常。
我已经阅读了通常可以很好地解释如何使用 @angular/fire 的文档(https://firebase.google.com/docs/firestore/manage-data/enable-offline),但我没有看到关于做什么的任何明显指示。文档显示了如何使用传递到调用中的选项参数initializeFirestore,但 Angular 应用程序似乎没有在外部使用此方法(从开发人员的角度来看)。
我目前拥有的是以下内容:
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideAnimations(),
provideServiceWorker('ngsw-worker.js', {
enabled: !isDevMode(),
registrationStrategy: 'registerWhenStable:30000',
}),
importProvidersFrom(
provideFirebaseApp(() =>
initializeApp({
// ... my info
})
),
provideAuth(() => getAuth()),
provideFirestore(() => {
const firestore = getFirestore();
enableIndexedDbPersistence(firestore); // Marked as deprecated :(
return firestore;
}),
provideStorage(() => getStorage())
),
],
};
Run Code Online (Sandbox Code Playgroud) 我如何访问Error.code属性?我得到一个Typescript错误,因为属性'code'在'Error'类型上不存在.
this.authCtrl.login(user, {
provider: AuthProviders.Password,
method: AuthMethods.Password
}).then((authData) => {
//Success
}).catch((error) => {
console.log(error); // I see a code property
console.log(error.code); //error
})
Run Code Online (Sandbox Code Playgroud)
或者有另一种方法来制作自定义错误消息吗?我想用另一种语言显示错误.
angular ×10
angularfire2 ×10
firebase ×8
javascript ×2
angularfire ×1
angularfire5 ×1
nrwl ×1
nrwl-nx ×1
timestamp ×1
typescript ×1