Dans la partie précédente de la série de tutoriels sur le blog Angular, vous avez appris à créer le ShowPostComponent
pour afficher la liste des articles de blog sur la page d'accueil. Vous avez récupéré les enregistrements insérés à partir du shell MongoDB à l'aide du point de terminaison de l'API REST créé..
Dans ce tutoriel, vous allez créer un nouveau composant appelé AddPostComponent
pour fournir une interface utilisateur permettant d'ajouter un nouveau blog à la base de données MongoDB.
Commençons par cloner le code source de la partie précédente de la série de tutoriels..
git clone https://github.com/royagasthyan/ShowPost AddPost
Accédez au répertoire du projet et installez les dépendances requises.
Installation de cd AddPost / client npm Installation de cd AddPost / server npm
Une fois les dépendances installées, redémarrez l'application cliente et serveur..
cd AddPost / client npm start cd Noeud de serveur AddPost / server app.js
Pointez votre navigateur sur http: // localhost: 4200 et vous devriez avoir l'application en cours d'exécution.
Commençons par créer le AddPostComponent
. Créez un dossier appelé ajouter-post
à l'intérieur de src / app
dossier. À l'intérieur de ajouter-post
dossier, créer un fichier appelé add-post.component.ts
et ajoutez le code suivant:
importer composant de '@ angular / core'; import Post from '… /models/post.model'; @Component (sélecteur: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css'] de la classe d'exportation AddPostComponent constructeur ()
Créez un fichier appelé add-post.component.html
et le code HTML suivant:
Vous montrerez le composant ajouter une publication sous forme de popup.
Maintenant, vous devez ajouter le AddPostComponent
au NgModule
. Importer le AddPostComponent
dans le app.module.ts
fichier.
importer AddPostComponent de './add-post/add-post.component';
Ajouter le composant au NgModule
déclarations
liste. Voici à quoi ça ressemble:
importer BrowserModule de '@ angular / platform-browser'; importer NgModule de '@ angular / core'; importer ROUTING depuis './app.routing'; importer FormsModule à partir de '@ angular / forms'; importer HttpClientModule à partir de '@ angular / common / http'; import RootComponent de './root/root.component'; importer LoginComponent de './login/login.component'; importer HomeComponent de './home/home.component'; importer ShowPostComponent de './show-post/show-post.component'; importer AddPostComponent de './add-post/add-post.component'; @NgModule (declarations: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], importations: [BrowserModule, ROUTING, FormsModule, HttpClientModule], fournisseurs: [], bootstrap: [RootConent]] énoncé de la langue.
Pour déclencher l’ajout d’une publication, vous avez déjà ajouté le cible de données
attribuer au bouton dans home.component.html
.
Enregistrez les modifications ci-dessus et redémarrez l'application. Connectez-vous à l'application et cliquez sur le bouton Ajouter lien dans la page d'accueil. Vous aurez le AddPostComponent
affiché sous forme de popup.
Ajouter le ngModel
directive aux éléments d'entrée pour Titre
et la description
.
Ajouter un Cliquez sur
directive au bouton pour appeler la méthode pour enregistrer l'article de blog.
Importer le Poster
modèle de src / app / models / post.model.ts
dans le add-post.component.ts
fichier.
import Post from '… /models/post.model';
Définir les poster
variable dans le add-post.component.ts
fichier.
poste publique: poste;
Définir les addPost
méthode à l'intérieur du add-post.component.ts
fichier. Du addPost
méthode, vous allez valider la saisie Titre
et la description
et appelez la méthode de service pour appeler l'API REST. Voici à quoi ressemble la méthode:
addPost () if (this.post.title && this.post.description) // appelle la méthode de service pour ajouter post else alert ('Titre et description requis');
Créons le fichier de service pour le composant AddPostComponent
. Créez un fichier appelé add-post.service.ts
et ajoutez le code suivant:
import Injectable from '@ angular / core'; importer HttpClient à partir de '@ angular / common / http'; import Post from '… /models/post.model'; @Injectable () export class AddPostService constructeur (http privé: HttpClient)
À l'intérieur de AddPostService
, créer une méthode appelée addPost
faire l'appel API REST.
addPost (post: Post) return this.http.post ('/ api / post / createPost', titre: post.title, description: post.description)
Comme indiqué dans le code ci-dessus, vous avez utilisé le HttpClient
faire l'appel API et renvoyer le Observable
.
dans le add-post.component.ts
déposer à l'intérieur du addPost
méthode, vous vous abonnez à la addPost
méthode de la add-post.service.ts
fichier.
this.addPostService.addPost (this.post) .subscribe (res => // réponse de l'appel de l'API REST);
Voici comment add-post.component.ts
fichier regarde:
importer composant de '@ angular / core'; importer AddPostService à partir de './add-post.service'; import Post from '… /models/post.model'; @Component (sélecteur: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css'], fournisseurs: [AddPostService] ) classe d'exportation AddPostComponent poste public: poste; constructeur (privé addPostService: AddPostService) this.post = new Post (); addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => console.log ('réponse est', res)) ; else alert ('Titre et description requis');
Créons un point de terminaison de l'API REST pour ajouter la publication de blog à la base de données MongoDB. dans le serveur / app.js
fichier, créez un point de fin d’API comme indiqué:
app.post ('/ api / post / createPost', (req, res) => // insère les détails dans MongoDB)
Tout d’abord, vous devez vous connecter à la base de données MongoDB à l’aide du Mangouste
client.
mongoose.connect (url, useMongoClient: true, fonction (err) if (err) renvoie err; console.log ('connexion établie'););
Une fois la connexion établie, vous devez créer un objet de modèle à l’aide de la Poster
schéma défini dans le serveur / modèle / post.js
fichier.
const post = new Post (titre: req.body.title, description: req.body.description)
Comme indiqué dans le code ci-dessus, vous avez créé l’objet Post en utilisant le Titre
et la description
passé de la demande req
objet.
Appeler le enregistrer
Méthode sur l'objet Post pour enregistrer l'entrée dans MongoDB.
post.save ((err, doc) => si (err) renvoie une erreur; renvoie res.status (200) .json (status: 'succès', data: doc))
Comme on le voit dans le code ci-dessus, une fois que le enregistrer
Le rappel de méthode est appelé sans erreur, il retournera le Succès
message avec l'objet retourné doc
.
Voici à quoi ressemble finalement le point final de l'API REST:
app.post ('/ api / post / createPost', (req, res) => mongoose.connect (url, useMongoClient: true, fonction (err) if (err) renvoie err; const post = new Post (titre: req.body.title, description: req.body.description) post.save ((err, doc) => if (err) renvoie une erreur; return res.status (200) .json (status : 'success', data: doc)));)
Enregistrez les modifications ci-dessus et redémarrez les serveurs Angular et Node. Connectez-vous à l'application et essayez d'ajouter un nouveau blog. Une fois que vous cliquez sur le Ajouter bouton, vérifiez la console du navigateur et vous aurez la réponse de réussite enregistré.
Une fois les détails de publication de blog correctement ajoutés à la base de données, vous devez fermer la fenêtre contextuelle. Pour fermer la fenêtre contextuelle, il existe un bouton de fermeture sur lequel vous devez cliquer par programme..
Vous utiliserez le @ViewChild
décorateur pour accéder au bouton de fermeture.
Importation ViewChild
et ElementRef
dans AddPostComponent
.
import Component, ViewChild, ElementRef à partir de '@ angular / core';
À l'intérieur de AddPostComponent
, définir la variable suivante:
@ViewChild ('closeBtn') closeBtn: ElementRef;
Initier le closeBtn
cliquez en utilisant le code suivant:
this.closeBtn.nativeElement.click ();
Ajoutez le code ci-dessus au rappel de succès du addPost
méthode. Voici la addPost
méthode de 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 ('Titre et description requis');
Enregistrez les modifications et redémarrez le serveur client. Connectez-vous à l'application et essayez d'ajouter un nouveau post de blog. Une fois que les détails de l'article du blog ont été enregistrés avec succès, la fenêtre contextuelle se ferme.
Une chose à noter est que le blog ajouté ne figure pas dans la liste des blogs. Vous devez donc ajouter un déclencheur pour indiquer quand mettre à jour le ShowPostComponent
. Vous utiliserez un service commun pour communiquer entre les deux composants.
Créez un dossier appelé un service
à l'intérieur de src / app
dossier. Créez un fichier appelé common.service.ts
avec le code suivant:
import Injectable from '@ angular / core'; importer Subject de 'rxjs / Subject'; @Injectable () export class CommonService public postAddAdd_Observable = new Subject (); constructor () notifyPostAddition () this.postAdded_Observable.next ();
Comme indiqué dans le code ci-dessus, vous avez déclaré Assujettir
appelé postAdded_Observable
suivre la nouvelle publication du blog dans la base de données. Chaque fois qu'un nouveau billet de blog est ajouté à la base de données, vous appelez le notifyPostAddition
méthode, qui informera les abonnés de la mise à jour.
Importer le Service commun
dans app.module.ts
et l'inclure dans le NgModule
liste du fournisseur. Voici à quoi ça ressemble:
importer BrowserModule de '@ angular / platform-browser'; importer NgModule de '@ angular / core'; importer ROUTING depuis './app.routing'; importer FormsModule à partir de '@ angular / forms'; importer HttpClientModule à partir de '@ angular / common / http'; import RootComponent de './root/root.component'; importer LoginComponent de './login/login.component'; importer HomeComponent de './home/home.component'; importer ShowPostComponent de './show-post/show-post.component'; importer AddPostComponent de './add-post/add-post.component'; importer CommonService de './service/common.service'; @NgModule (declarations: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], importations: [BrowserModule, ROUTING, FormsModule, HttpClientModule], fournisseurs: [CommonServ], démarrage
Importation Service commun
dans le show-post.component.ts
déposer et l'initialiser dans la méthode constructeur.
importer CommonService de '… /service/common.service';
constructeur (private showPostService: ShowPostService, commonService privé: CommonService)
À l'intérieur de ngOnInit
méthode, abonnez-vous à la postAdded_Observable
variable et charger le getAllPost
méthode. Voici comment ngOnInit
la méthode ressemble:
ngOnInit () this.getAllPost (); this.commonService.postAdded_Observable.subscribe (res => this.getAllPost (););
Importation Service commun
dans le add-post.component.ts
déposer et appeler le notifyPostAddition
méthode une fois que le blog a été ajouté. Voici comment addPost
méthode de la AddPostComponent
regards:
addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click (); ceci.commonService notifyPostAddition ();); else alert ('Titre et description requis');
Enregistrez les modifications ci-dessus et redémarrez le serveur client. Connectez-vous à l'application et ajoutez un nouvel article de blog. Une fois ajoutée, la liste des articles de blog est mise à jour avec le nouvel article de blog..
Dans ce tutoriel, vous avez créé le AddPostComponent
d'ajouter les détails de publication de blog à la base de données MongoDB. Vous avez créé l'API REST pour enregistrer une publication de blog dans la base de données MongoDB à l'aide du Mangouste
client.
Dans la partie suivante de la série, vous implémenterez la fonctionnalité permettant de modifier et de mettre à jour les détails de publication de blog..
Le code source de ce tutoriel est disponible sur GitHub.
Comment était votre expérience jusqu'à présent? Faites-moi savoir vos suggestions précieuses dans les commentaires ci-dessous.