原始项目在这里:ionic-firestore-crud-example
HTML:
<ion-header>
<ion-navbar>
<ion-title>
Crud example
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label floating>title:</ion-label>
<ion-input type="text" value="" [(ngModel)]="model.title"></ion-input>
</ion-item>
<ion-item>
<ion-label floating>message :</ion-label>
<ion-textarea type="text" row="10" [(ngModel)]="model.text"></ion-textarea>
</ion-item>
<ion-item>
<button type="button" (click)="addMessage()" ion-button full >Submit</button>
</ion-item>
</ion-list>
<ion-card>
<ion-card-header>
Swipe item to the left to delete or edit
</ion-card-header>
</ion-card>
<ion-list>
<ion-item-sliding *ngFor="let message of messages">
<ion-item>
<h3>title: {{message.title}}</h3>
<p>text: {{message.text}}</p>
<ion-card (tap)="tapEvent($event)">
<ion-item>
<ion-icon name="heart" ></ion-icon>
{{tap}}
</ion-item>
</ion-card>
</ion-item>
<ion-item-options>
<button ion-button color="danger" (click)="deleteMessage(message.$key)">
<ion-icon name="ios-trash"></ion-icon>
delete
</button>
<button ion-button color="success" (click)="updateMessage(message)">
<ion-icon name="ios-create"></ion-icon>
edit
</button>
</ion-item-options>
</ion-item-sliding>
</ion-list>
</ion-content>
.ts file
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import * as firebase from 'firebase';
import 'firebase/firestore';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
messages: any;
private db: any;
model: any = {};
isEditing: boolean = false;
public tap: number = 0;
constructor(public navCtrl: NavController) {
this.db = firebase.firestore();
this.loadData();
}
tapEvent(e) {
this.tap++;
}
loadData(){
this.getAllDocuments("messages").then((e)=>{
this.messages = e;
});
}
addMessage(){
if(!this.isEditing){
this.addDocument("messages", this.model).then(()=>{
this.loadData();//refresh view
});
}else{
this.updateDocument("messages", this.model.$key, this.model).then(()=>{
this.loadData();//refresh view
});
}
this.isEditing = false;
//clear form
this.model.title = '';
this.model.text = '';
this.model.tap = '';
}
updateMessage(obj){
this.model = obj;
this.isEditing = true;
}
deleteMessage(key){
this.deleteDocument("messages", key).then(()=>{
this.loadData();//refresh view
this.isEditing = false;
});
}
//CRUD operation methods------------------------------------------------------------------------------------------
getAllDocuments(collection: string): Promise<any> {
return new Promise((resolve, reject) => {
this.db.collection(collection)
.get()
.then((querySnapshot) => {
let arr = [];
querySnapshot.forEach(function (doc) {
var obj = JSON.parse(JSON.stringify(doc.data()));
obj.$key = doc.id
console.log(obj)
arr.push(obj);
});
if (arr.length > 0) {
console.log("Document data:", arr);
resolve(arr);
} else {
console.log("No such document!");
resolve(null);
}
})
.catch((error: any) => {
reject(error);
});
});
}
deleteDocument(collectionName: string, docID: string): Promise<any> {
return new Promise((resolve, reject) => {
this.db
.collection(collectionName)
.doc(docID)
.delete()
.then((obj: any) => {
resolve(obj);
})
.catch((error: any) => {
reject(error);
});
});
}
addDocument(collectionName: string, dataObj: any): Promise<any> {
return new Promise((resolve, reject) => {
this.db.collection(collectionName).add(dataObj)
.then((obj: any) => {
resolve(obj);
})
.catch((error: any) => {
reject(error);
});
});
}
updateDocument(collectionName: string, docID: string, dataObj: any): Promise<any> {
return new Promise((resolve, reject) => {
this.db
.collection(collectionName)
.doc(docID)
.update(dataObj)
.then((obj: any) => {
resolve(obj);
})
.catch((error: any) => {
reject(error);
});
});
}
}
我添加了一个诸如Facebook之类的点击事件,以便每次有人点击心脏图标时,计数都会增加一个。
tapEvent(e) {
this.tap++;
}
当然,如果我刷新该计数,则该计数将返回零,因为它没有保存在Firestore中。
如何将这些事件保存到Firestore? 谢谢大家!