我有一个Observable数据集,我使用angularfire2 snapshotChanges函数从Firestore查询获得。我能够获取信息并显示正常,所以这一切都正常。我正在努力的是以下几点。 observable包含用户已选择包含在其帐户中的团队。当他们通过"添加团队" stepper,我想突出他们已经添加的团队,不允许他们重新添加。我有一个管理用户团队数据存储的服务,我想为该服务添加一个唯一的检查。
鉴于背景,这里是服务功能uniqCheck,我现在已经搞乱了三天而无法开始工作。 .do方法不会输出任何内容,这使我相信.map方法不会做我认为应该做的事情,但是控制台中不会抛出任何错误。我不应该回到数据库来验证这一点,因为我已经在客户端中有了observable。我已经包含了我的加载功能以供参考。 uniqCheck函数就是我想要解决的问题。
我目前正在尝试的内容I found here。
有什么建议吗?
private _collection: AngularFirestoreCollection<any>;
public store_userteams: Observable<any[]> = null;
load(): Promise<any> {
return new Promise(resolve => {
// console.log('load user team records for user ' + this._session.currentuser.uid);
this._collection = this._firedb.collection<any>('userteams', ref => ref.where('userid', '==', this._session.currentuser.uid ));
this.store_userteams = this._collection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
});
resolve(true);
});
}
// tta is a javascript collection passed in from the component function. tta.id is valid and correct
uniqCheck(tta): Promise<any> {
return new Promise(resolve => {
let matchcount = 0;
console.log(tta.id);
this.store_userteams
.map( teams => teams.filter(team => team.teaminfo.id===tta.id) )
.do( teams => console.log('filtered teams: ' + teams) )
.subscribe( teams => matchcount = teams.length );
console.log('matchcount: ' + matchcount);
resolve(matchcount);
});
}
答案 0 :(得分:0)
试试这个,下面的解决方案不会将store_userteams设为Observable,并且id
也会出现在每个对象中,因此很容易执行与javascript相关的过滤器(下划线或香草)
load() {
this.loadData().subscribe(data => {
this.store_userteams = _.pluck(data, 'data');
});
}
loadData() {
this._collection = this._firedb.collection<any>('userteams', ref => ref.where('userid', '==', this._session.currentuser.uid ));
return this._collection.snapshotChanges().map(actions => {
return actions.map(a => {
const id = a.payload.doc.id;
const data = a.payload.doc.data();
data.id = id;
return { data };
});
});
}
现在在uniqCheck
函数中,您可以使用store_userteams
对象
uniqCheck(tta) {
// underscore or vanilla js filter on this.store_userteams
console.log(tta);
console.log('this.store_userteams : ', this.store_userteams);
}
希望这有帮助!