En la parte anterior de esta serie de tutoriales, aprendió cómo implementar la funcionalidad para editar los detalles de la publicación del blog.
En esta parte, implementará la funcionalidad para eliminar una publicación de blog existente e implementar la funcionalidad de cierre de sesión del usuario.
Comencemos clonando el código fuente de la última parte de la serie de tutoriales..
git clone https://github.com/royagasthyan/AngularBlogApp-EditUpdate DeletePost
Vaya al directorio del proyecto e instale las dependencias necesarias.
cd DeletePost / client npm install cd DeletePost / server npm install
Una vez que tenga instaladas las dependencias, reinicie la aplicación cliente y servidor.
cd DeletePost / client npm start cd DeletePost / server node app.js
Dirija su navegador a http: // localhost: 4200 y tendrá la aplicación en ejecución.
Ya has agregado el ícono de eliminar a las publicaciones de blog enumeradas. Cuando el usuario haga clic en el icono de eliminación correspondiente a cualquier publicación del blog, deberá mostrar una ventana emergente de confirmación de eliminación. Si el usuario confirma el proceso de eliminación, solo es necesario eliminar la publicación del blog.
Comencemos con la adición de una confirmación emergente modal cuando el usuario haga clic en el botón Eliminar. Agregue el siguiente código emergente modal a la show-post.component.html
expediente.
Modificar el icono de eliminar para incluir el objetivo de datos
atributo como se muestra:
Guarde los cambios anteriores y reinicie el servidor cliente. Inicie sesión en la aplicación y haga clic en el ícono de eliminar correspondiente a cualquier publicación del blog, y aparecerá el modo de confirmación de confirmación..
Vamos a crear un punto final de REST API para eliminar la publicación del blog. En el servidor / app.js
archivo, cree un extremo de REST API para manejar la eliminación de publicaciones de blog según la publicación de blog carné de identidad
. Aquí es cómo se ve el punto final de la API REST:
app.post ('/ api / post / deletePost', (req, res) => )
Comience por conectarse a la base de datos MongoDB usando el Mangosta
cliente.
mongoose.connect (url, useMongoClient: true, function (err) // conexión establecida);
Harás uso de la findByIdAndRemove
Método para encontrar la publicación del blog usando el carné de identidad
y eliminarlo. Una vez que la publicación del blog se haya eliminado correctamente, devolverá el estado
como respuesta. Aquí es cómo se ve el punto final de la API REST:
app.post ('/ api / post / deletePost', (req, res) => mongoose.connect (url, useMongoClient: true, function (err) if (err) throw err; Post.findByIdAndRemove (req .body.id, (err, doc) => if (err) throw err; return res.status (200) .json (status: 'success', data: doc)));)
Cuando el usuario hace clic en el icono de eliminar, debe mantener los detalles de la publicación en una variable. Si el usuario continúa con la opción de eliminar después de la confirmación, realizará una llamada a la API REST de eliminación.
Agrega un método llamado setDelete
Haga clic en el botón Eliminar show-post.component.html
. Aquí está cómo se ve:
Dentro de show-post.component.ts
archivo, definir una variable llamada post_to_delete
.
Define el método llamado setDelete
dentro show-post.component.ts
para mantener los detalles de la publicación para ser eliminado.
setDelete (post: Post) this.post_to_delete = post;
Cuando el usuario hace clic en el botón Cancelar de la ventana emergente, debe llamar a un método llamado unsetDelete
para configurar el post_to_delete
a nulo Aquí está cómo se ve:
unsetDelete () this.post_to_delete = null;
Aquí es cómo el Cancelar
botón de código HTML para show-post.component.html
miradas
Ahora definamos el método de servicio llamado Eliminar mensaje
dentro de show-post.service.ts
expediente. Aquí está cómo se ve:
deletePost (id) return this.http.post ('/ api / post / deletePost', id: id)
Para llamar al método de servicio desde el ShowPostComponent
, definir un método llamado Eliminar mensaje
que se suscribirá a la Eliminar mensaje
método de la ShowPostService
. Aquí es cómo el Eliminar mensaje
método de la ShowPostComponent
miradas
deletePost () this.showPostService.deletePost (this.post_to_delete._id) .subscribe (res => this.getAllPost ();)
Una vez que se ha eliminado la publicación, debe actualizar la lista de publicaciones, por lo tanto, debe hacer una llamada al getAllPost
método. También debe cerrar la ventana emergente una vez que la eliminación se haya realizado correctamente..
Primero, importa una referencia a ViewChild
y ElementRef
en el show-post.component.ts
expediente.
importe Component, OnInit, ViewChild, ElementRef desde '@ angular / core';
Definir una variable cerrarBtn
para crear una referencia al botón de cierre emergente.
@ViewChild ('closeBtn') closeBtn: ElementRef;
Ahora, cuando la llamada de eliminación se realiza correctamente, debe cerrar la ventana emergente de confirmación de eliminación.
Así es como se modifica. Eliminar mensaje
método se ve:
deletePost () this.showPostService.deletePost (this.post_to_delete._id) .subscribe (res => this.getAllPost (); this.closeBtn.nativeElement.click ();))
Aquí es cómo el show-post.component.ts
aspecto del archivo:
importe Component, OnInit, ViewChild, ElementRef desde '@ angular / core'; importe ShowPostService desde './show-post.service'; importar Post desde '… /models/post.model'; importe CommonService, desde '… /service/common.service'; @Component (selector: 'app-show-post', templateUrl: './show-post.component.html', styleUrls: ['./show-post.component.css'], proveedores: [ShowPostService] ) la clase de exportación ShowPostComponent implementa OnInit @ViewChild ('closeBtn') closeBtn: ElementRef; puestos públicos: cualquier []; public post_to_delete; constructor (showPostService privado: ShowPostService, commonService: CommonService) ngOnInit () this.getAllPost (); this.commonService.postAdded_Observable.subscribe (res => this.getAllPost ();); setDelete (post: Post) this.post_to_delete = post; unsetDelete () this.post_to_delete = null; getAllPost () this.showPostService.getAllPost (). subscribe (result => console.log ('result is', result); this.posts = result ['data'];); editPost (post: post) this.commonService.setPostToEdit (post); deletePost () this.showPostService.deletePost (this.post_to_delete._id) .subscribe (res => this.getAllPost (); this.closeBtn.nativeElement.click ();)
Guarde los cambios anteriores y reinicie la aplicación cliente y servidor. Inicie sesión en la aplicación y haga clic en el icono de eliminar correspondiente a cualquier publicación del blog. Aparecerá un cuadro de confirmación. Confirme la eliminación de la publicación del blog, la publicación del blog se eliminará y la lista de publicaciones del blog se actualizará.
Cuando el usuario inicie sesión en la aplicación, mantendrá el nombre de usuario registrado en un almacenamiento local
. Modificar el validateLogin
metodo dentro del LoginComponent
para almacenar el nombre de usuario registrado en almacenamiento local
.
Cuando se valide el resultado de la llamada a la API, agregue el siguiente código para almacenar el nombre de usuario que inició sesión.
localStorage.setItem ('logInUser', this.user.username);
Aquí es cómo el validateLogin
método se ve:
validateLogin () if (this.user.username && this.user.password) this.loginService.validateLogin (this.user) .subscribe (resultado => if (resultado ['estado'] === 'éxito' ) localStorage.setItem ('logInUser', this.user.username); this.router.navigate (['/ home']); else alert ('Password de usuario incorrecto');, error => console.log ('error is', error);); else alert ('ingresar nombre de usuario y contraseña');
Ahora, dentro de la home.component.html
archivo, agregar un método llamado cerrar sesión
al botón de cerrar sesión.
Dentro de home.component.ts
archivo, crea un método llamado cerrar sesión
. Dentro de cerrar sesión
método, necesita borrar el almacenamiento local para el logInUser
. Aquí es cómo se ve el método:
logout () localStorage.removeItem ('logInUser'); this.router.navigate (['/']);
En el InicioComponente
método del constructor, debe agregar un cheque para el logInUser
clave de almacenamiento local. Si no lo encuentra, debe redirigir a la página de inicio de sesión. Aquí es cómo el home.component.ts
aspecto del archivo:
importe Component, ViewChild, ElementRef desde '@ angular / core'; importe CommonService desde '… /service/common.service'; importar Router desde '@ angular / router'; @Component (selector: 'app-home', templateUrl: './home.component.html', styleUrls: ['./home.component.css']) clase de exportación HomeComponent @ViewChild ('addPost') addBtn: ElementRef; constructor (commonService privado: CommonService, enrutador privado: enrutador) if (! localStorage.getItem ('loginInUser')) this.router.navigate (['/']); this.commonService.postEdit_Observable.subscribe (res => this.addBtn.nativeElement.click ();); logout () localStorage.removeItem ('logInUser'); this.router.navigate (['/']);
Guarde los cambios anteriores y reinicie el servidor cliente. Intente acceder a la página de inicio cargando la URL http: // localhost: 4200 / home en la ventana del navegador. Serás redirigido a la página de inicio de sesión..
Inicie sesión en la aplicación y haga clic en el botón de cerrar sesión. Serás desconectado y redirigido a la página de inicio de sesión..
En esta parte de la serie de tutoriales, aprendió cómo implementar la eliminación de publicaciones de blog agregando un icono a la lista de publicaciones de blogs. También creó una API REST para eliminar los detalles de la publicación del blog de la base de datos MongoDB usando la Mangosta
cliente.
Solo ha implementado las características muy básicas de una aplicación de blog, y esta aplicación puede desarrollarse aún más para incluir muchas más características..
¿Cómo fue tu experiencia aprendiendo a crear una aplicación de blog utilizando Angular y MongoDB? Háganos saber sus pensamientos y sugerencias en los comentarios a continuación.
El código fuente de este tutorial está disponible en GitHub.
Y por último, recuerda que JavaScript es la Idioma de la web. No deja de tener sus curvas de aprendizaje, pero si está buscando recursos adicionales para estudiar o usar en su trabajo, vea lo que tenemos disponible en el mercado de Envato..