簡體   English   中英

AngularFire2更新創建新的文檔字段,而不是更新字段

[英]AngularFire2 update creates new document field instead of updating a field

我想更新一個Firestore模型,其中包含配置文件名稱和帶有Angular 6的主題標簽列表。“名稱”存儲為文檔字段的值,“主題標簽”存儲為對象的鍵。 當我嘗試更新數據庫條目時,我的程序每次調用更新函數時都會添加一個稱為“數據”的新文檔字段,而不是更新現有字段。

我怎樣才能解決這個問題?

這就是更新之前我的Firestore的外觀。 更新前數據庫的外觀

我的更新功能添加了一個新的“數據”字段,而不是每次調用時都進行更新。 在此處輸入圖片說明

我的Firestore服務:

 export class MembersService { membersCollection: AngularFirestoreCollection<Member>; members$: Observable<Member[]>; memberDoc: AngularFirestoreDocument<Member>; constructor(public afs: AngularFirestore) { this.membersCollection = afs.collection<Member>('Members'); this.members$ = this.membersCollection.snapshotChanges().pipe( map(actions => actions.map(a => { const data = a.payload.doc.data() as Member; const id = a.payload.doc.id; return { data, id }; })) ); } getMembers(): Observable<Member[]> { return this.members$; } updateMember(member: Member) { this.memberDoc = this.afs.doc(`Members/${member.id}`); this.memberDoc.update(member); } } 

我的輸入component.ts:

 export class MembersComponent implements OnInit { members: Member[]; editState: boolean; membertoEdit: Member; constructor(private membersService: MembersService) { this.editState = false; } ngOnInit() { this.membersService.getMembers().subscribe(members => { this.members = members; }); } editMember(member: Member) { this.editState = true; this.membertoEdit = member; } clearState() { this.editState = false; this.membertoEdit = null; } submit(member: Member, editName: string, editHashtag: string) { if ( editName !== '' && editHashtag !== '') { this.membertoEdit.name = editName; const key = editHashtag; const object = {}; object[key] = true; this.membertoEdit.hashtag = object; this.membersService.updateMember(this.membertoEdit); } this.clearState(); } } 

我為用戶輸入的component.html輸入:

 <button *ngIf="editState == false" (click)="editMember(member)">edit</button> <div *ngIf="editState && membertoEdit.id == member.id"> <form> <input type="text" #editName> <input type="text" #editHashtag> <button (click)="submit(member, editName.value, editHashtag.value); editName.value=''">Submit</button> </form>> </div> 

找到了一個解決方案:即使我也不認為這很優雅。 可以自己傳遞每個輸入

 updateMember(member: Member, editName: string, editHashtag: object) { this.memberDoc = this.afs.doc(`Members/${member.id}`); console.log(this.memberDoc); this.memberDoc.update({ name: editName, hashtag: editHashtag }); } 

 submit(member: Member, editName: string, editHashtag: string) { if ( editName !== '' && editHashtag !== '') { const key = editHashtag; const object = {}; object[key] = true; this.membersService.updateMember(member, editName, object); } this.clearState(); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM