I den forrige delen av denne opplæringsserien lærte du hvordan du oppretter legge til komponenten for å legge til nye blogginnlegg. Du lærte hvordan du oppretter REST API-endepunktet for å legge til et nytt innlegg i MongoDB-databasen.
I denne delen av opplæringsserien lærer du hvordan du implementerer funksjonaliteten for å redigere et eksisterende blogginnlegg fra bloggposten.
La oss begynne med å klone kildekoden fra den siste delen av opplæringsserien.
git klone https://github.com/royagasthyan/AngularBlogApp-Post EditPost
Naviger til prosjektkatalogen og installer de nødvendige avhengighetene.
cd EditPost / client npm installere cd EditPost / server npm installere
Når du har installert avhengighetene, må du starte klient- og serverprogrammet på nytt.
cd EditPost / client npm start cd EditPost / server node app.js
Pek nettleseren din til http: // localhost: 4200 og du vil få programmet til å kjøre.
I ShowPostComponent
, Du legger til to ikoner for redigering og sletting av blogginnlegget. Du vil bruke Font Awesome til å vise redigerings- og slettikonene.
Last ned og ta med fontens kjempemappe i eiendeler
mappe.
I src / app / index.html
side, inkludere en referanse til fonten awesome CSS
stil.
Endre nå show-post / show-post.component.html
fil for å inkludere HTML for redigering og sletning av ikoner.
Her er hvordan show-post.component.html
fil ser ut:
Post.title
3 dager sidenPost.description
Les mer…
Lagre endringene ovenfor og start klientprogrammet på nytt. Logg inn på programmet, og du vil kunne se redigerings- og slettikonene som svarer til hvert oppført blogginnlegg.
Når brukeren klikker på redigeringsikonet som samsvarer med et blogginnlegg, må du fylle ut blogginnleggets detaljer i tilleggspopup-vinduet for å oppdatere.
Legg til en klikkmetode på redigeringsikonet.
Inne i CommonService
, du må definere en observerbar å holde styr på når redigeringsknappen er klikket. Definer det observerbare som vist:
offentlig postEdit_Observable = nytt emne ();
Definer en annen variabel for å holde oversikt over innlegget som skal redigeres.
offentlig post_til_be_edited; constructor () this.post_to_be_edited = nytt innlegg ();
Når redigeringsknappen er klikket, vil du beholde innlegget som skal redigeres i CommonService
og utløse det observerbare å varsle om post redigering. Definer to metoder for å angi innlegget som skal redigeres og for å varsle innleggsredigering.
notifyPostEdit () this.postEdit_Observable.next (); setPostToEdit (innlegg: Post) this.post_to_be_edited = post; this.notifyPostEdit ();
Inne i klikkmetoden, vil du ringe til setPostToEdit
metode fra CommonService
. Her er hvordan editPost
metoden ser ut:
editPost (post: Post) this.commonService.setPostToEdit (post);
Du vil få postdetaljene i den vanlige tjenesten når brukeren klikker på redigeringsknappen. For å vise add-popup-vinduet for oppdatering, må du klikke på Legg til post-knappen programmatisk.
Inne i home / home.component.html
fil, legg til en #
identifikator til legg til post-knappen.
Importere ViewChild
og ElementRef
inne i home.component.ts
fil.
importer Komponent, ViewChild, ElementRef fra '@ vinkel / kjerne';
Definer en referanse til tilleggsknappen inne i home.component.ts
fil.
@ViewChild ('addPost') addBtn: ElementRef;
Inne i HomeComponent
konstruktør, abonnere på postEdit_Observable
fra CommonService
. Ved å ringe postEdit_Observable
abonnement tilbakeringing, påkall legg til-knappen for å vise popup-vinduet. Her er hvordan home.component.ts
fil ser ut:
importer Komponent, ViewChild, ElementRef fra '@ vinkel / kjerne'; importer CommonService fra '... /service/common.service'; @Component (selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.css']) eksportklasse HomeComponent @ViewChild ('addPost') addBtn: ElementRef; Konstruktør (privat commonService: CommonService) this.commonService.postEdit_Observable.subscribe (res => this.addBtn.nativeElement.click (););
Du må abonnere på postEdit_Observable
i add-post.component.ts
fil for å angi innlegget som skal redigeres på post
variabel. Her er hvordan ngOnInit
metode i add-post.component.ts
utseende:
ngOnInit () this.commonService.postEdit_Observable.subscribe (res => this.post = this.commonService.post_to_be_edited;);
Lagre endringene ovenfor og start klientserveren på nytt. Logg inn på søknaden og klikk på redigeringsknappen mot et blogginnlegg. Du vil kunne se postopplysningene som er fylt ut i tilleggspost-popup-vinduet.
Innsiden server / app.js
, la oss definere et annet REST API-endepunkt for å oppdatere innleggsdetaljer basert på postens ID. Slik ser det ut:
app.post ('/ api / post / updatePost', (req, res) => )
La oss først bruke Mongoose
å koble til MongoDB-databasen.
app.post ('/ api / post / updatePost', (req, res) => mongoose.connect (url, useMongoClient: true, funksjon (err) console.log ('forbindelse etablert');) ;)
Når forbindelsen er etablert, bruker du Oppdater
metode på Post-modellen.
Post.update (_id: req.body.id, title: req.body.title, beskrivelse: req.body.description, (err, doc) => hvis (err) kaste err;)
Du oppdaterer innlegget basert på ID
av innlegget bestått. Som vist i koden ovenfor har du spesifisert innlegget _id
å være oppdatert. I det andre alternativet har du angitt feltene som skal oppdateres, som er tittel
og beskrivelse
.
Når detaljene blir oppdatert, returnerer du status
sammen med antall rader som er berørt under oppdateringen. Slik ser REST API-sluttpunktet for innleggsoppdateringen ut:
app.post ('/ api / post / updatePost', (req, res) => mongoose.connect (url, useMongoClient: true, funksjon (err) hvis (feil) kaste err; Post.update _id: req.body.id, title: req.body.title, beskrivelse: req.body.description, (err, doc) => hvis (feil) kaste feil, return res.status (200). json (status: 'suksess', data: doc)));)
De ID
returnert for hvert innlegg fra MongoDB er _id
, så du må endre id
av modellen vår src / app / modeller / post.model.ts
. Slik ser det ut:
eksporter klasse Post constructor () this._id = "; this.title ="; this.description = "; offentlig _id; offentlig tittel; offentlig beskrivelse;
Når du klikker på Legg til post-knappen, vil metoden som heter, være addPost
. Inne i addPost
metode i add-post.component.ts
, Du vil sjekke om post
objektet har en _id
. Hvis en _id
er tilstede, må du ringe oppdateringsmetoden fra tjenesten, ellers vil du ringe til tjenesten for tilleggstjeneste.
Opprett en metode som kalles updatePost
inne i add-post.service.ts
fil.
UpdatePost (post: Post) return this.http.post ('/ api / post / updatePost', id: post._id, tittel: post.title, beskrivelse: post.description)
Her er hvordan den endrede addPost
metode fra add-post.component.ts
fil ser ut:
addPost () if (this.post.title && this.post.description) if (this.post._id) this.addPostService.updatePost (this.post) .subscribe (res => this.closeBtn.nativeElement .click (); this.commonService.notifyPostAddition ();); annet this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click (); this.commonService.notifyPostAddition ();); else alert ('Tittel og beskrivelse kreves');
Lagre endringene ovenfor, og start begge Angular and Node-serveren på nytt. Logg inn på programmet og prøv å redigere et innlegg. Du vil få en popup som vises for å redigere detaljene ved å klikke på redigeringsknappen. Klikk på add-knappen, og detaljene vil bli oppdatert og vises i bloggposten.
I denne opplæringen implementerte du funksjonaliteten for å oppdatere eksisterende blogginnleggsdetaljer. Du opprettet REST API-endepunktet for å avslutte endringer for å oppdatere blogginnleggene basert på blogginnlegget. Du har gjort bruk av Mongoose
klient for å oppdatere detaljene i blogginnlegget i MongoDB-databasen.
I neste del implementerer du slettingsinnlegget og logger ut funksjonaliteten.
Hvordan var din erfaring så langt? Gi oss beskjed om dine tanker, forslag eller eventuelle rettelser i kommentarene nedenfor.
Kildekode fra denne opplæringen er tilgjengelig på GitHub.