我有一个配置文件表和一个作业表存储在 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
我有一个核心服务,它获取 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) 嗨,我在我的一项 ETE 测试中遇到此错误,该测试为我的 angular 应用程序练习登录功能和启动行为。
似乎是通过使用await this.angularFireAuth.auth.signInWithEmailAndPassword(uname, pw);
whereangularFireAuth是AngularFireAuth来自 '@angular/fire/auth'的注入实例登录而触发
的;
我在这里检查了 Firestore 配额,但找不到用于验证密码的配额的参考。有人可以指出我的配额是什么吗?
报告的控制台错误如下所示:
zone-evergreen.js:659 Unhandled Promise rejection: Exceeded quota for verifying passwords. ; Zone: ProxyZone ; Task: Promise.then ; Value: u
几分钟后问题解决,然后按预期运行测试。
我正在尝试设置一个 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
我有一个操作,我使用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)
有人有想法吗?
我将一些用户信息保存到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
我正在使用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
我正在搜索如何使用服务来获取用户的数据
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) 遵循此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,我想我应该
takeUntil()从外部Observable authState()或内部Observable 调用其中一个运算符this.todoService.getUserTodos(user.uid).哪个方法是正确的,以确保在组件被销毁后取消订阅所有Observable?
我的目标:
网络应用程序(类似于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查询
angularfire2 ×10
angular ×8
firebase ×5
rxjs ×2
angular-standalone-components ×1
angular15 ×1
angularfire ×1
angularfire5 ×1
jasmine ×1
javascript ×1
mocking ×1
observable ×1
unit-testing ×1