用户注销后,我需要完全清除当前用户数据。因此我使用clearPersistence()函数。它需要在clearPersistence()之前运行terminate()。
this.afs.firestore.terminate().then(() => {
this.afs.firestore.clearPersistence().then(() => {
});
});
Run Code Online (Sandbox Code Playgroud)
在上面运行以下命令以清除 firestore 本地缓存后,我收到此错误。
FirebaseError: The client has already been terminated.
有什么建议如何重新初始化 firestore 实例或有更好的方法来实现吗?谢谢。
我正在尝试将我的应用程序依赖项和代码从 @angular/fire 6.x 升级到 7.1.0-rc4 (因为我需要 7.0.x 中不存在的功能),所以我编辑了我的package.json:
"@angular/fire": "~7.1.0-rc.4",
"firebase": "^9.0.0",
Run Code Online (Sandbox Code Playgroud)
然后我改变了我的进口:
import { AngularFirestore } from '@angular/fire';
Run Code Online (Sandbox Code Playgroud)
到
import { AngularFirestore } from '@angular/fire/compat';
Run Code Online (Sandbox Code Playgroud)
我的应用程序是 Ionic5/Angular12 应用程序,所以我假设它默认使用 Ivy。看着这里,在我看来,我已经完成了升级所需的一切。
但是我收到以下编译错误:
Module '"@angular/fire/compat"' has no exported member 'AngularFirestore'.ts(2305)
import AngularFirestore
Run Code Online (Sandbox Code Playgroud)
这是我的app.module.ts文件:
import { AngularFirestoreModule } from '@angular/fire/compat/firestore';
import { APP_INITIALIZER, NgModule, Optional, PLATFORM_ID } from '@angular/core';
import { BrowserModule, BrowserTransferStateModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } …Run Code Online (Sandbox Code Playgroud) firebase typescript angularfire2 angular google-cloud-firestore
我有一个 Angular 17 应用程序,需要向其中添加 Angular/Fire(Angular Firebase 版本)。
当我尝试安装它时,npm install @angular/fire我遇到了依赖项错误npm ERR! Could not resolve dependency: npm ERR! peer @angular/common@"^16.0.0" from @angular/fire@16.0.0,因为新版本的 Angular Fire 尚未发布。
我偶然发现了这个线程 - https://github.com/angular/angularfire/issues/3459。
我想知道如何将 Angular Fire 安装到 17 中?我应该使用下一个版本还是使用---force. 既然我们不再有 app.module.ts,那么它在哪里初始化呢?我曾经在 app.module.ts 中完成,但我认为它会在 app.config.ts 或 main 中完成?
当我push("number")进入firebase时,使用angularfire2,数字不会直接附加,而是嵌套在生成的代码中.
Firebase实时数据库内部:
1)初始代码:
"myList": {
"0": {
"key1": "val1"
},
"1": {
"key2": "val2"
}
}
Run Code Online (Sandbox Code Playgroud)
2)之后 .push({"key3": "val3"})
"myList": {
"0": {
"key1": "val1"
},
"1": {
"key2": "val2"
},
"-generatedcode_": {
"key3": "val3"
}
}
Run Code Online (Sandbox Code Playgroud)
为什么没有嵌套时没有直接添加新对象?
我正在构建一个Angular2应用程序,使用Auth0进行身份验证,使用AngularFire进行数据库.在我的构造函数中,我传递了我的AngularFire af实例,但我无法在回调事件中访问它.有没有其他方法可以访问我的AngularFire实例?
// app/auth.service.ts
import { Injectable } from '@angular/core';
import { tokenNotExpired } from 'angular2-jwt';
import { AngularFire, AuthMethods, AuthProviders } from 'angularfire2';
// Avoid name not found warnings
declare var Auth0Lock: any;
declare var Auth0: any;
@Injectable()
export class Auth {
// Configure Auth0
lock = new Auth0Lock('AUTH0_CLIENT_ID', 'AUTH0_DOMAIN', {});
constructor(private af: AngularFire) {
// Add callback for lock `authenticated` event
this.lock.on("authenticated", (authResult) => {
this.lock.getProfile(authResult.idToken, function(error:any, profile:any){
if(error){
throw new Error(error);
}
localStorage.setItem('id_token', authResult.idToken);
localStorage.setItem('profile', JSON.stringify(profile));
var …Run Code Online (Sandbox Code Playgroud) 现在,我正在使用文档中描述的方法展开我的数据.但是,文档说明:
AngularFire2默认情况下会解压缩Firebase DataSnapshot,但您可以通过指定preserveSnapshot选项将数据作为原始快照获取.
如何在item不手动解包数据快照的情况下访问"默认"解包功能(读取:访问元素)?
我的Firebase数据如下所示:
{
testObj : {
firstName: "beckah",
lastName: "s"
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码(有效)是:
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AngularFireDatabase, FirebaseObjectObservable } from 'angularfire2/database';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
item: FirebaseObjectObservable<any>;
constructor( public navCtrl: NavController,
public db: AngularFireDatabase ) {
this.item = db.object('/testObj', { preserveSnapshot: true });
this.item.subscribe(snapshot => {
console.log(snapshot.val())
});
}
}
Run Code Online (Sandbox Code Playgroud)
哪个输出
Object {firstName: "beckah", lastName: …Run Code Online (Sandbox Code Playgroud) 尝试使用最新版本的Firebase和Angular.我想要实现的总体概念是管理员身份验证.我已经实现了登录注销功能.我已使用UID将googleAuth登录用户保存到数据库.现在我要做的是将一些页面限制为登录和管理员.所以我已经将isAdmin:true指定为存储在数据库中的用户对象中的值.基本上我想查看用户是否为admin并为路由器参数返回true或false.我一直在使用Angular和Firebase.我认为自己是初学者.我不太明白如何从AngularFire2 4 - > AngularFire 5迁移.我得到的当前错误是TS2345:
ERROR in src/app/admin-auth-guard.service.ts(15,38): error TS2345: Argument of type '(user: User) => AngularFireObject<AppUser>' is not assignable to parameter of type '(value: User, index: number) => ObservableInput<{}>'.
Type 'AngularFireObject<AppUser>' is not assignable to type 'ObservableInput<{}>'.
Type 'AngularFireObject<AppUser>' is not assignable to type 'ArrayLike<{}>'.
Property 'length' is missing in type 'AngularFireObject<AppUser>'.
Run Code Online (Sandbox Code Playgroud)
从我认为我理解get函数返回一个Object,但错误是期望一个可观察的.我所知道的关于可观察物的是你可以订阅它们而你应该销毁它们......
我需要使用当前登录的用户ID来查询数据库并返回与uid匹配的用户对象,然后检查isAdmin是true还是false.然后将其返回到路径参数,以便我可以将页面限制为Authenticated和Admin.
请指出我正确的方向.
管理员认证 - guard.service.ts
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { …Run Code Online (Sandbox Code Playgroud) 根据Angularfire2 Docs的说法:
AngularFireDatabase允许您使用Firebase的原始数据库Realtime Database。对于需要跨客户端实时同步状态的移动应用程序而言,这是一种高效,低延迟的解决方案。
但是,有AngularFireDatabaseModule,我不知道它是什么。因此,我想更详细地了解这两个(如果可用,请提供更详细的链接)以及何时使用AngularFireDatabase和 AngularFireDatabaseModule。
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { User } from './../classes/user';
import { AlertService } from './alert.service';
import { Alert } from './../classes/alert';
import { AlertType } from './../enums/alert-type.enum';
import { Observable } from 'rxjs';
import 'rxjs/add/Observable/of';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFirestore, AngularFirestoreDocument } from 'angularfire2/firestore';
import 'rxjs/add/operator/switchMap';
import { from } from 'rxjs';
import 'rxjs/add/observable/fromPromise';
import { AngularFireAuthModule } from 'angularfire2/auth';
@Injectable({
providedIn: 'root'
})
export class AuthService …Run Code Online (Sandbox Code Playgroud)我尝试下载并仅显示实时数据库中的特定数据.我有以下代码:
getUserPlatformIos() {
this.dataRef = this.afDatabase.list('data/users', ref => ref.orderByChild('meta/platform').equalTo('ios'));
this.data = this.dataRef.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
return this.data;
}
Run Code Online (Sandbox Code Playgroud)
为什么firebase会在我之前查询时下载整个数据库?这导致非常长的加载时间和大量下载的数据....
firebase ionic-framework firebase-realtime-database angularfire2 ionic3
angularfire2 ×10
firebase ×8
angular ×6
ionic3 ×2
auth0 ×1
cordova ×1
ionic2 ×1
javascript ×1
json ×1
typescript ×1