标签: angularfire2

Angularfire2 Firestore更新多个文档中的相同字段

我有一个配置文件表和一个作业表存储在 Firebase Firestore 上。我正在创建一个 Angular 5 网站。为了节省网络调用,我将用户配置文件名称添加到每个作业文档中。(不确定 firestore 是否有表链接)。因此,当用户更新他的姓名时,我也必须更新他们的工作文档(不多)。我可以获得具有正确用户 ID 的工作集合。但我无法弄清楚如何在不使用 Observable(一次性调用)的情况下迭代列表并更新一个字段。这是我尝试的迫使我的浏览器进入连续循环的方法

jobsCollection : AngularFirestoreCollection<Job>;
jobDoc: AngularFirestoreDocument<Job>;

jobs: Observable<Job[]>;
job: Observable<Job>;

update(profile: Profile){
  this.jobsCollection = this.db.collection('jobs', ref => {
    return ref.where('user_id', '==',profile.user_id);
  });

  this.tracksCollection.valueChanges(item => {

    console.log('update this record:', item);

    item.forEach(job=> {
      console.log('This is the job');
      this.jobDoc = this.db.doc(`jobs/${job.id}`);
      job.name= profile.name;
      this.jobDoc.update(job);
    });


  });

}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢 PK

angularfire2 angular google-cloud-firestore

2
推荐指数
1
解决办法
6539
查看次数

Angular firebase - 使用 angularFireAuth 对服务进行单元测试

我有一个核心服务,它获取 obj 的实例firebase.auth并使用 getter 返回它。它很简单,如下所示:

export class AuthService {

  ...
  constructor(private afAuth: AngularFireAuth,
              private afs: AngularFirestore) {
  ...
}

  public getAuthInstance(): FirebaseAuth {
    return this.afAuth.auth;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个 LoginService 需要 AuthService 来登录我的应用程序。

export class LoginService {

  constructor(private authService: AuthService) {
  }

  public login(email, password): Promise<UserCredential | string> {
    return this.authService.getAuthInstance().signInWithEmailAndPassword(email, password)
      .catch(() => Promise.reject('Login failed.'));
  }
Run Code Online (Sandbox Code Playgroud)

也不要太复杂。但现在我想测试我的登录组件。- 特别是login方法。我无法嘲笑signInWithEmailAndPassword。我基本上尝试了一切:

  • jasmine.spies
  • 自己创建的假对象。

测试类如下所示:

  ...
  const authStub: AuthService = jasmine.createSpyObj('AuthService', ['getAuthInstance']);
  const fireStub = {
    auth: { …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking jasmine angularfire2 angular

2
推荐指数
1
解决办法
1160
查看次数

Firestore:“超出了非常化密码的配额”?

嗨,我在我的一项 ETE 测试中遇到此错误,该测试为我的 angular 应用程序练习登录功能和启动行为。

似乎是通过使用await this.angularFireAuth.auth.signInWithEmailAndPassword(uname, pw); whereangularFireAuthAngularFireAuth来自 '@angular/fire/auth'的注入实例登录而触发 的;

我在这里检查了 Firestore 配额但找不到用于验证密码的配额的参考。有人可以指出我的配额是什么吗?

报告的控制台错误如下所示:

zone-evergreen.js:659 Unhandled Promise rejection: Exceeded quota for verifying passwords. ; Zone: ProxyZone ; Task: Promise.then ; Value: u

几分钟后问题解决,然后按预期运行测试。

angularfire2 google-cloud-firestore

2
推荐指数
1
解决办法
1927
查看次数

Angular 15 独立 AppComponent 和 AngularFireAuth

我正在尝试设置一个 Angular Web 应用程序,其中 AppComponent 使用 Firebase 身份验证(和数据库)本身是独立的。因此没有NgModules。

我在main.ts中添加了

bootstrapApplication(AppComponent, {
  providers: [
    importProvidersFrom(
      provideFirebaseApp(() => initializeApp(firebaseConfig)),

    ),
    importProvidersFrom(
      provideFirestore(() => getFirestore())
    ),
  ...
  ]

Run Code Online (Sandbox Code Playgroud)

在 AppComponent 中我添加了其他导入:

@Component({
  standalone: true,
  selector: 'app-root',
  template: `<router-outlet></router-outlet>`,
  imports: [
    RouterModule,
    AngularFireAuthModule,
    AngularFirestoreModule,
    AngularFireStorageModule,
    AngularFireDatabaseModule
  ]
})
export class AppComponent {
Run Code Online (Sandbox Code Playgroud)

我没有任何特定的错误,但是一旦我尝试注入构造函数,AngularFireAuth就会收到以下错误:

在此输入图像描述

我也尝试过添加

importProvidersFrom(AngularFireAuthModule),
Run Code Online (Sandbox Code Playgroud)

main.ts它没有帮助。

有谁知道我如何解决这个问题或者知道我做错了什么?

提前致谢 :)

firebase angularfire2 angular angular-standalone-components angular15

2
推荐指数
1
解决办法
1640
查看次数

Angularfire 2流中未定义Angular 2 Service调用?

我有一个操作,我使用angularfire2从我的firebase获取一些数据,映射它并对数据进行一些更新/检查然后我想再次保存它但我有这个奇怪的问题,它告诉我'this.fs .getRiders'未定义?但我正在使用服务来创建流,我不确定这里发生了什么.

继承了一些代码

 @Injectable()
      export class RoundService {

    public currentRound:FirebaseListObservable<any>;

constructor(private af: AngularFire, private as:AuthService, private fs:FirebaseService) { }

pullCurrentRound(serieUid:string){  

  return this.af.database.object(`series/${serieUid}/currentRound`)
    .flatMap((res)=>{
      return this.af.database.object(`rounds/${res.$value}`)
        .map((res)=>res)
        .do(this.roundUpdates)
        .do(this.saveRound)
    })
}

saveRound(round){

    this.fs.getRiders.update(round.uid,round)
      .then(snap=>{
        console.log(snap)
      })
}
Run Code Online (Sandbox Code Playgroud)

而错误

 Uncaught TypeError: Cannot read property 'getRiders' of undefined
at SafeSubscriber.RoundService.saveRound [as _next] (round.service.ts:57)
at SafeSubscriber.__tryOrSetError (Subscriber.js:232)
at SafeSubscriber.next (Subscriber.js:174)
at Subscriber._next (Subscriber.js:125)
at Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:82)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at DoSubscriber._next (do.js:87)
at DoSubscriber.Subscriber.next (Subscriber.js:89)
at MapSubscriber._next (map.js:83)
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

rxjs angularfire2 angular

1
推荐指数
1
解决办法
160
查看次数

在推送到列表后获取firebase中的路径

我将一些用户信息保存到firebase数据库中.我还想在成功保存后检索它的路径.我能够做得很好,但是,我对我收到的数据感到困惑,如下所示.

截图

因此,如果我想要获得路径,我必须运行

data.path.o
Run Code Online (Sandbox Code Playgroud)

为什么这种格式如此奇怪?我看到U,Nc,m,path,Y o.他们是假设是这样还是我错过了什么?

我使用角度2 + angularfire2与以下代码

  saveUserToFirebase(user: User): firebase.database.ThenableReference {
    const userRef = this.af.database.list('/users/' + user.company);
    return userRef.push(user)
  }

this.databaseService.saveUserToFirebase(user)
    .then( data => {
        console.log('User saved to firebase databse with path', data); 
        console.log('User saved to firebase databse with path1', data.path); 
        console.log('User saved to firebase databse with path2', data.path.o); 

        this.router.navigate(['/login']);
        this.isLoading = false;
    }, error => {
        this.isLoading = false;
        console.log("Error asjf0e", error);
    })
Run Code Online (Sandbox Code Playgroud)

javascript firebase firebase-realtime-database angularfire2 angular

1
推荐指数
1
解决办法
398
查看次数

使用Angular 2中的FirebaseObservable计算项目

我正在使用Angular 2和AngularFire与FirebaseObservable来获取"喜欢"列表,使用以下代码:

likes: FirebaseListObservable<number[]>;

constructor(private angularFire: AngularFire) {
    this.likes = angularFire.database.list('/likes');
}

onClicked() {
    this.likes.push({'item': 'new like'})
}
Run Code Online (Sandbox Code Playgroud)

我正在使用各种循环

<ul>
    <li *ngFor="let like of likes | async">
        {{ like.item }}
    </li>
 </ul>
Run Code Online (Sandbox Code Playgroud)

我想得到所有项目的计数,但以下是失败:

<span>{{ likes.length }}</span>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何实现这一目标?

谢谢!

firebase angularfire firebase-realtime-database angularfire2 angular

1
推荐指数
2
解决办法
3297
查看次数

使用Ionic获取angularfire2中的当前用户数据

我正在搜索如何使用服务来获取用户的数据

users.services.ts

import { AngularFire, AuthProviders, AuthMethods, FirebaseListObservable}     


export class Users {
   uid :string = '8fbEOShqIigfA4u84cyvJcLkv5u1';

    constructor(public af: AngularFire) {}

    getUserObservable(){
        return this.af.database.object('/users/' + this.uid);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我的家

import { Users } from '../../services/users.service';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  user: any;
  isAuthenticated: boolean = true;

  constructor(private userService: Users) {}

  ngOnInit(){
    this.userService.getUserObservable().subscribe((userObject) => {
      this.user = userObject;
      console.log("result : ", this.user);
    });
  }

}
Run Code Online (Sandbox Code Playgroud)

在控制台我得到:

result :  Object {imgLink: "blabla.jpg", money: 0, score: 0, uid: "8fbEOShqIigfA4u84cyvJcLkv5u1", …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-authentication angularfire2 angular

1
推荐指数
1
解决办法
2071
查看次数

Angular RxJS - 取消订阅mergeMap?

遵循此Stack Overflow帖子中描述的最佳实践:Angular RxJS何时应取消订阅订阅,请考虑此Angular组件生命周期钩子:

private ngUnsubscribe: Subject<void> = new Subject();

ngOnInit() {
  this.fireAuth.authState
    .takeUntil(this.ngUnsubscribe)
    .mergeMap((user) => this.todoService.getUserTodos(user.uid))
    .takeUntil(this.ngUnsubscribe)
    .subscribe((todos) => this.userTodoArray = todos);
}

ngOnDestroy() {
  this.ngUnsubscribe.next();
  this.ngUnsubscribe.complete();
}
Run Code Online (Sandbox Code Playgroud)

作为authState()mergeMap()两个返回Observables,我想我应该

  1. 取消订阅它们(如上所示)或
  2. 只能takeUntil()从外部Observable authState()或内部Observable 调用其中一个运算符this.todoService.getUserTodos(user.uid).

哪个方法是正确的,以确保在组件被销毁后取消订阅所有Observable?

observable rxjs angularfire2 angular

1
推荐指数
1
解决办法
1452
查看次数

Firestore:如何查询文档集合内的地图对象?

我的目标:

网络应用程序(类似于Google云端硬盘)有2个屏幕。

第一个屏幕是“我的故事”,其中显示了我是所有者的所有故事文档。

第二个屏幕是“与我共享”,其中显示了我是读者,作家或评论者的所有故事文档。

我们有这个/ stories / {storyid}

{
  title: "A Great Story",
  content: "Once upon a time ...",
  roles: {
    alice: "owner",
    bob: "reader",
    david: "writer",
    jane: "commenter"
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

完整的数据结构参考:https : //firebase.google.com/docs/firestore/solutions/role-based-access

问题:如何编写以下查询以实现上述目标?

db
.collection('stories')
.where(`roles.${uid}`, '==', 'owner')
Run Code Online (Sandbox Code Playgroud)

上面的查询不起作用,因为它将要求Firestore索引role.alice,roles.bob,roles.david,roles.jane和role。[all_uid]。


编辑#1:找到相关帖子(无答案),询问有关带角色的Firestore查询

firebase angularfire2 google-cloud-firestore angularfire5

1
推荐指数
2
解决办法
2948
查看次数