Maison  >  Questions et réponses  >  le corps du texte

Problèmes de notification push et invite du routeur dans Laravel et VUE 3

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.

P粉464208937P粉464208937277 Il y a quelques jours495

répondre à tous(1)je répondrai

  • P粉926174288

    P粉9261742882024-01-17 09:26:09

    Avec pinia pour les alertes du magasin, vous avez accès aux alertes dans toute l'application :

    import { defineStore } from "pinia";
    import { useToast } from "primevue/usetoast";
    
    export const useAlertStore = defineStore({
        id: "alert",
        state: () => ({
            toast: useToast(),
        }),
        actions: {
            success(title, message) {
                this.toast.add({
                    severity: "success",
                    summary: title,
                    detail: message,
                    life: 3000,
                });
            },
            info(title, message) {
                this.toast.add({
                    severity: "info",
                    summary: title,
                    detail: message,
                    life: 3000,
                });
            },
            warn(title, message) {
                this.toast.add({
                    severity: "warn",
                    summary: title,
                    detail: message,
                    life: 3000,
                });
            },
            error(title, message) {
                this.toast.add({
                    severity: "error",
                    summary: title,
                    detail: message,
                    life: 3000,
                });
            },
        },
    });

    Puis par exemple ma fonction de connexion :

    const alert = useAlertStore();
    
    async function login() {
        const authStore = useAuthStore();
        await authStore.login(formData.email, formData.password);
        alert.success(
            t("alerts.loginTitle"),
            t("alerts.user") + `${authStore.user.name} ` + t("alerts.loginMessage")
        );
    }

    Enfin, ajoutez le composant Toast à votre fichier App.vue :

    <template>
        <Toast />
        <router-view />
    </template>

    répondre
    0
  • Annulerrépondre