I den forrige delen av Angular blog-opplæringsserien lærte du hvordan du opprettet ShowPostComponent
for å vise listen over blogginnlegg på hjemmesiden. Du hentet postene som ble satt inn fra MongoDB-skjermen ved hjelp av det opprettede REST API-sluttpunktet.
I denne opplæringen vil du opprette en ny komponent som heter AddPostComponent
å gi brukergrensesnittet for å legge til et nytt blogginnlegg i MongoDB-databasen.
La oss begynne med å klone kildekoden fra den forrige delen av opplæringsserien.
git klone https://github.com/royagasthyan/ShowPost AddPost
Naviger til prosjektkatalogen og installer de nødvendige avhengighetene.
cd AddPost / client npm installere cd AddPost / server npm installere
Når du har installert avhengighetene, må du starte klient- og serverprogrammet på nytt.
cd AddPost / client npm start cd AddPost / server node app.js
Pek nettleseren din til http: // localhost: 4200 og du bør ha programmet kjørt.
La oss begynne med å lage AddPostComponent
. Opprett en mappe som heter add-post
inne i src / app
mappe. Inne i add-post
mappe, opprett en fil som heter add-post.component.ts
og legg til følgende kode:
importer Komponent fra '@ vinkel / kjerne'; importer Post fra '... /models/post.model'; @Component (selector: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css']) eksportklasse AddPostComponent constructor ()
Opprett en fil som heter add-post.component.html
og følgende HTML-kode:
Du vil vise tilleggspostkomponenten som en popup.
Nå må du legge til AddPostComponent
til NgModule
. Importer AddPostComponent
i app.module.ts
fil.
importer AddPostComponent fra './add-post/add-post.component';
Legg komponenten til NgModule
erklæringer
liste. Slik ser det ut:
importer BrowserModule fra '@ vinkel / plattform-nettleser'; importer NgModule fra '@ vinkel / kjerne'; importer ROUTING fra './app.routing'; importer FormModule fra '@ vinkler / skjemaer'; importer HttpClientModule fra '@ vinkel / vanlig / http'; importer RootComponent fra './root/root.component'; importer LoginComponent fra './login/login.component'; importer HomeComponent fra './home/home.component'; importer ShowPostComponent fra './show-post/show-post.component'; importer AddPostComponent fra './add-post/add-post.component'; @NgModule (deklarasjoner: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], import: [BrowserModule, ROUTING, FormsModule, HttpClientModule], leverandører: [], bootstrap: [RootComponent]) eksportklasse AppModule
For å utløse tilleggspost-popupen har du allerede lagt til data-target
Tilordne knappen i home.component.html
.
Lagre endringene ovenfor og start programmet på nytt. Logg inn på søknaden og klikk på Legg til lenke på hjemmesiden. Du vil ha AddPostComponent
vises som en popup.
Legg til ngModel
Direktivet til inngangselementene for tittel
og beskrivelse
.
Legg til en klikk
Direktiv til knappen for å ringe metoden for å lagre blogginnlegget.
Importer Post
modell fra src / app / modeller / post.model.ts
i add-post.component.ts
fil.
importer Post fra '... /models/post.model';
Definer post
variabel i add-post.component.ts
fil.
Offentlig stilling: Post;
Definer addPost
metode inne i add-post.component.ts
fil. Fra addPost
metode, vil du validere den angitte tittel
og beskrivelse
og ring til tjenestemetoden for å ringe til REST API. Slik ser metoden ut:
addPost () if (this.post.title && this.post.description) // ring servicemetoden for å legge til post else alert ('Tittel og beskrivelse kreves');
La oss lage servicefilen for komponenten AddPostComponent
. Opprett en fil som heter add-post.service.ts
og legg til følgende kode:
importer Injectable fra '@ vinkel / kjerne'; importer HttpClient fra '@ vinkel / vanlig / http'; importer Post fra '... /models/post.model'; @Injectable () eksportklasse AddPostService konstruktør (privat http: HttpClient)
Inne i AddPostService
, opprett en metode som kalles addPost
for å gjøre REST API-anropet.
addPost (post: Post) return this.http.post ('/ api / post / createPost', tittel: post.title, beskrivelse: post.description)
Som vist i ovennevnte kode har du gjort bruk av Httpclient
å gjøre API-anropet og returnere observer
.
I add-post.component.ts
fil inne i addPost
metode, vil du abonnere på addPost
metode fra add-post.service.ts
fil.
this.addPostService.addPost (this.post) .subscribe (res => // svar fra REST API-anrop);
Her er hvordan add-post.component.ts
fil ser ut:
importer Komponent fra '@ vinkel / kjerne'; importer AddPostService fra './add-post.service'; importer Post fra '... /models/post.model'; @Component (selector: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css'], leverandører: [AddPostService] ) eksportklasse AddPostComponent offentlig post: Post; konstruktør (privat addPostService: AddPostService) this.post = new Post (); addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => console.log ('response is', res)) ; else alert ('Tittel og beskrivelse kreves');
La oss opprette et REST API-sluttpunkt for å legge blogginnlegget til MongoDB-databasen. I server / app.js
fil, opprett et API-sluttpunkt som vist:
app.post ('/ api / post / createPost', (req, res) => // legg inn detaljene til MongoDB)
Først må du koble til MongoDB-databasen ved hjelp av Mongoose
klient.
mongoose.connect (url, useMongoClient: true, funksjon (err) hvis (err) kaste err; console.log ('connection established'););
Når forbindelsen er etablert, må du opprette et modellobjekt ved hjelp av Post
skjema definert i server / modell / post.js
fil.
const post = ny post (tittel: req.body.title, beskrivelse: req.body.description)
Som vist i koden ovenfor skapte du Post-objektet ved hjelp av tittel
og beskrivelse
sendt inn fra forespørselen req
gjenstand.
Ring lagre
Metode på Post-objektet for å lagre oppføringen til MongoDB.
post.save ((err, doc) => hvis (feil) kaste feil, returnere res.status (200) .json (status: 'suksess', data: doc))
Som vist i ovennevnte kode, når lagre
Metode tilbakeringing kalles uten feil, det vil returnere suksess
melding sammen med det returnerte objektet doc
.
Slik ser REST API-sluttpunktet endelig ut:
app.post ('/ api / post / createPost', (req, res) => mongoose.connect (url, useMongoClient: true, funksjon (feil) hvis (feil) kaste err; const post = ny innlegg (tittel: req.body.title, beskrivelse: req.body.description) post.save ((err, doc) => hvis (feil) kaste err; return res.status (200) .json : 'suksess', data: doc)));)
Lagre endringene ovenfor og start begge Angular and Node-serverne på nytt. Logg inn på programmet og prøv å legge til et nytt blogginnlegg. Når du klikker på Legg til knappen, sjekk nettleserkonsollen, og du vil få suksessresponsen logget inn.
Når blogginnleggene blir lagt til databasen, må du lukke popup-vinduet. For å lukke popupen, er det en nær knapp som du må klikke programmatisk.
Du bruker den @ViewChild
dekoratør for å få tilgang til lukkeknappen.
Importere ViewChild
og ElementRef
i AddPostComponent
.
importer Komponent, ViewChild, ElementRef fra '@ vinkel / kjerne';
Inne i AddPostComponent
, definer følgende variabel:
@ViewChild ('closeBtn') closeBtn: ElementRef;
Initiere closeBtn
klikk ved å bruke følgende kode:
this.closeBtn.nativeElement.click ();
Legg til koden ovenfor til suksess tilbakeringing av addPost
metode. Her er addPost
metode fra add-post.component.ts
.
addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click ();); else alert ('Tittel og beskrivelse kreves');
Lagre endringene og start klientserveren på nytt. Logg inn på programmet og prøv å legge til et nytt blogginnlegg. Når blogginnleggets detaljer har blitt lagret, vil popup-filen lukkes.
En ting å merke seg er at det nylig lagt blogginnlegget ikke vises i bloggposten. Så du må legge til en utløser for å varsle når du skal oppdatere ShowPostComponent
. Du vil benytte deg av en felles tjeneste for å kommunisere mellom de to komponentene.
Opprett en mappe som heter service
inne i src / app
mappe. Opprett en fil som heter common.service.ts
med følgende kode:
importer Injectable fra '@ vinkel / kjerne'; importer Emne fra 'rxjs / Subject'; @Injectable () eksport klasse CommonService public postAdded_Observable = nytt Emne (); konstruktør () notifyPostAddition () this.postAdded_Observable.next ();
Som vist i koden ovenfor har du erklært a Emne
kalt postAdded_Observable
for å holde oversikt over det nye blogginnlegget til databasen. Når et nytt blogginnlegg legges til databasen, vil du ringe til notifyPostAddition
metode, som vil varsle abonnentene om oppdateringen.
Importer CommonService
i app.module.ts
og inkludere den i NgModule
leverandørens liste. Slik ser det ut:
importer BrowserModule fra '@ vinkel / plattform-nettleser'; importer NgModule fra '@ vinkel / kjerne'; importer ROUTING fra './app.routing'; importer FormModule fra '@ vinkler / skjemaer'; importer HttpClientModule fra '@ vinkel / vanlig / http'; importer RootComponent fra './root/root.component'; importer LoginComponent fra './login/login.component'; importer HomeComponent fra './home/home.component'; importer ShowPostComponent fra './show-post/show-post.component'; importer AddPostComponent fra './add-post/add-post.component'; importer CommonService fra './service/common.service'; @NgModule (deklarasjoner: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], import: [BrowserModule, ROUTING, FormsModule, HttpClientModule], leverandører: [CommonService], bootstrap: [RootComponent]) eksportklasse AppModule
Importere CommonService
i show-post.component.ts
filen og initialiser den i konstruktormetoden.
importer CommonService fra '... /service/common.service';
konstruktør (privat showPostService: ShowPostService, privat commonService: CommonService)
Inne i ngOnInit
metode, abonnere på postAdded_Observable
variabel og last inn getAllPost
metode. Her er hvordan ngOnInit
metoden ser ut:
ngOnInit () this.getAllPost (); this.commonService.postAdded_Observable.subscribe (res => this.getAllPost (););
Importere CommonService
i add-post.component.ts
fil og ring til notifyPostAddition
Metode når blogginnlegget er lagt til. Her er hvordan addPost
metode fra AddPostComponent
utseende:
addPost () if (this.post.title && this.post.description) 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 klientserveren på nytt. Logg inn på søknaden og legg til et nytt blogginnlegg. Når det er lagt til, blir bloggpostlisten oppdatert med det nye blogginnlegget.
I denne opplæringen skapte du AddPostComponent
å legge til blogginnleggets detaljer i MongoDB-databasen. Du opprettet REST API for å lagre et blogginnlegg til MongoDB-databasen ved hjelp av Mongoose
klient.
I neste del av serien implementerer du funksjonaliteten for å redigere og oppdatere blogginnleggets detaljer.
Kildekode for denne opplæringen er tilgjengelig på GitHub.
Hvordan var din erfaring så langt? Gi meg beskjed om dine verdifulle forslag i kommentarene nedenfor.