J'ai un problème : lors du basculement entre les composants à l'aide de router.push, la notification Toast ne s'affiche pas. J'ai une vue de modification utilisateur et ce que je veux faire est de rediriger vers le profil de l'utilisateur après la modification et d'afficher immédiatement une notification toast.
En gros, j'ai ce qui suit :
Routes.js
import { createRouter, createWebHistory } from 'vue-router'; //Modules import DashboardIndex from './components/modules/dashboard'; //Users import UsersIndex from './components/modules/users'; import UsersCreate from './components/modules/users/create'; import UsersEdit from './components/modules/users/edit'; import UsersView from './components/modules/users/view'; export default new createRouter({ history: createWebHistory(), routes: [ { path: '/', name: 'dashboard.index', component: DashboardIndex }, { path: '/users', name: 'users.index', component: UsersIndex}, { path: '/user/create', name: 'user.create', component: UsersCreate}, { path: '/user/edit/:id', name: 'user.edit', props: true, component: UsersEdit}, { path: '/user/:id', name: 'user.view', props: true, component: UsersView}, ] })
Combinable/user.js
import axios from 'axios'; import { useRouter } from 'vue-router' import { useToast } from 'primevue/usetoast'; export default function useUsers() { const users = ref([]) const user = ref([]) const errors = ref([]) const router = useRouter() const toast = useToast() /** * * All Users * */ const getUsers = async () => { const response = await axios.get('/admin/users') users.value = response.data } /** * * Create User * */ const storeUser = async (data) => { try { let response = await axios.post('/admin/user', data) await router.push({ name: 'user.view', params: { id: response.data.id } }) } catch (e) { if (e.response.status === 422) { errors.value = e.response.data.errors } } } /** * * Create User * */ const updateUser = async (id) => { try { //this.showToast = true; let response = await axios.put(`/admin/user/${id}`, user.value) router.push({ name: 'user.view', params: { id: response.data.id } }) toast.add({severity:'success', summary: 'Éxito', detail: 'El Usuario ha sido modificado', life: 3000}) } catch (e) { if (e.response.status === 422) { errors.value = e.response.data.errors } } } /** * * View User * */ const showUser = async (id) => { let response = await axios.get(`/admin/user/${id}`) user.value = response.data } /** * * Delete User * */ const destroyUser = async (id) => { await axios.delete(`/admin/user/${id}`) } return {errors, users, user, getUsers, storeUser, updateUser, showUser, destroyUser} }
View.vue
<template> <div class="container-fluid"> <Toast position="bottom-right"/> USER PROFILE </div> </template> <script> import useUsers from '../../../composables/users' import { onMounted } from 'vue'; export default { props: { id: { required: true } }, setup(props) { const { user, showUser } = useUsers(); const showUserMounted = async () => { await showUser(props.id) } onMounted(showUserMounted) return { user } } } </script>
Fait important, j'utilise Prime VUE.
De plus, j'ai commenté que lorsque je vais sur toast.add({severity:'success', Summary: 'Success',detail: 'The User has been Modified', life: 3000}) dans showUser, peut afficher des toasts messages bien.
Je pense que ce dont j'ai besoin est un indicateur qui change la valeur dans la méthode updateUser (par exemple showToast = true) et à partir de la méthode showUser, vérifiez si c'est vrai et si c'est le cas, exécutez toast.add mais je ne le fais pas. à la fin, je ne savais pas quoi faire.
Merci beaucoup.
Avec pinia pour les alertes du magasin, vous avez accès aux alertes dans toute l'application :
Puis par exemple ma fonction de connexion :
Enfin, ajoutez le composant Toast à votre fichier App.vue :