---- vue + ts el conjunto de rutas de configuración TS, rutas guardias, -axios de intercambio de datos, la lógica de validación de inicio de sesión, la administración del estado

Configuración TS Route ###

    Instalación ①: NPM i-Vue enrutador -S
    ②src bajo las nuevas páginas / Home.vue (también Goods.vue, Detail.vue y otras páginas):
        < Plantilla > 
            < div clase = "casa" > 
                < h2 >首页</ h2 > 
            </ div > 
        </ plantilla > 
        < script de lang = "TS" > 
        importación de Vue ' vue ' ; 
        {} la importación de componentes del " vue-propiedad-decorador " ; 
        @Component ({}) 
        de exportación por defecto la clase principal se amplía Vue { 
            
        } 
        </ script de >
    ③src bajo el plugins nuevo / router.ts :( nota Reg.vue y Detail.vue se basan en importación y requieren medios para lograr el enrutamiento carga diferida)
        importación de Vue "vue" ; 
        VueRouter importación de "vue-enrutador" ; 
        Vue.use (VueRouter); // 安装插件

        importación de Inicio "../pages/Home.vue" ; 
        Las mercancías de importación de "../pages/Goods.vue" ; 
        La importación de usuarios de "../pages/User.vue" ; 
        importar el login de la "../pages/Login.vue" ; 
        importar nopage de "../pages/NoPage.vue" ; 
        deje rutas = [ 
            {ruta: "/ home" , componente: Inicio}, 
            {ruta:, componente: Productos}, 
            {ruta: "/ usuario" , componente: Usuario}, 
            {ruta: "/ login" , componente: Iniciar sesión}, 
            {ruta: "/ reg", componente: () => importación (". ./pages/Reg.vue" )}, 
            {ruta: "/detail",component:(resolve:any)=>{require(["../pages/Detail.vue" ], resolver)}}, 
            { ruta: "*" , componente: nopage}, 
            {ruta: "/", redirección: "/ home" }, 
        ]; 

        dejar que el router = nueva VueRouter ({ 
            modo: "la historia" ,

        exportar por defecto del router;
    ④main.js enrutador introducido e inscripciones:
        enrutador de importación "./plugins/router" nueva Vue ({ 
            render: h => h (APP), 
            el router 
        .}) $ montaje ( '#app')

        
    ruta ⑤App.vue abrió un espacio:
        < Enrutador-view > </ enrutador-view >

 

### guardias de ruta

    router.ts 中:
        / * 
        Guardia global 
        * / 
        router.beforeEach ((a, desde, Siguiente) => { 
            el console.log ( "Global guardia frente" ) 
            siguiente (); 
        }) 
        router.afterEach ((a, a partir de) => { 
            consola .log ( "oponerse a retaguardia global" ) 
        }) 

        // enrutamiento guardia exclusiva 
        {ruta: "/ usuario", componente: el usuario, beforeEnter: (a: la ruta, a partir de: la ruta, continuación: Función) => { 
            consola. log ( "encaminamiento exclusiva protección frontal" ) 
            siguiente (); 
        }},
        Nota: Al configurar la ruta exclusiva guardia, Ruta define el tipo de introducción automática de ts (VueRouter importación, {} Ruta del "vue-enrutador";)

 

    Tenga en cuenta que los componentes internos de la Ruta :( tipo de protección se introduce manualmente)
        (1) User.vue en:
            {} De la Ruta de importación "VUE-Router" ; 
            @Component ({ 
                / * 
                    la instrucción personalizada Aquí escritura, filtro, función de enlace guardia 
                * / 
                beforeRouteEnter (a: la Ruta, a partir de: la Ruta, Siguiente: Función) { 
                    // ya que la escritura en el decorador, la función de enganche puede inferir automáticamente a, desde, el tipo de al lado, se pueden agregar sin tipos pueden 
                    console.log ( "la protección delantera de montaje" ) 
                    próximos (); 
                } 
            })
        (2) Reg.vue de:
            {} la importación Ruta del "vue-enrutador" ; 
            @Component ({ 
                beforeRouteLeave (a: Ruta, a partir de: Ruta, a continuación: Función) { 
                    console.log ( "组件内后置守卫" ) 
                    siguiente (); 
                } 
            })

 

### -axios de intercambio de datos

    Instalación: NPM i axios @ tipos / axios -S
    Nota: No todos los plug-ins con la declaración de tipo de archivo, sólo la declaración de tipo de archivos con el fin de garantizar cios de apoyo, no hay archivos de declaración de tipo de documento de declaración de tipo es necesario instalar plug-ins.

 

    (1) AXIOS uso inicial:
        ①public los nuevos datos / user.json:
            {
                 "Datos" : [ 
                    { "nombre de usuario": "WXM" } 
                ] 
            }
        ②Home.vue en:
            Axios de importación "Axios" ; 
            exportación por defecto la clase principal se extiende el Vue { 
                Montada (): void { 
                    axios ({ 
                        URL: "/data/user.json" // datos tenga acceso directo pública 
                    }) entonces (. 
                        RES => la console.log (res.data) 
                    ) 
                } 
            }
    acceso de datos (2) JSON-servidor:
        Necesidad de primer servicio de datos abierta JSON-servidor, a continuación, establecer la url: URL: "http: // localhost: 3000 / datos"
    (3) acceso a datos tiantian-api:
        ① abierta tiantian-api Servicios de datos: inicio NPM plazo
        ② configurar proxy-dominios (Nueva vue.config.js el directorio raíz):
            module.exports = { 
                devserver: { 
                    Proxy: {
                         "/ v3" : { 
                            objetivo: "http: // localhost: 3000" , 
                            changeOrigin: verdadera 
                        } 
                    } 
                } 
            }
        ③ dirección proxy para sustituir la dirección original:
            url: "/ v3 / página de inicio"
    (4) interceptor axios:
        Nueva axios.ts bajo ①plugins:
            axios importación, {AxiosRequestConfig, AxiosResponse} de "axios" ; 
            enrutador de importación './router' ; 
            {} la importación TUSER de '@' / tipos ; 

            // 请求拦截器 
            axios.interceptors.request.use ((config: AxiosRequestConfig): AxiosRequestConfig => {
                 / * 
                    抓取modo,到响应头携带
                    显示carga 
                * / 
                permitir al usuario: TUSER = window.localStorage.getItem ( "usuario " ); 
                user = user JSON.parse (usuario):?"" ; 
                config.headers = {? token: usuario .token} //Llevar el encabezado de solicitud 
                de retorno config; 
            }, (error) => {
                 retorno Promise.reject (error) 
            }) 

            // bloqueador de respuesta 
            axios.interceptors.response.use ((respuesta: AxiosResponse <cualquier >): AxiosResponse <any> => {
                 / * 
                    señal caduca, entrada salto, dejar la dirección de la corriente 
                    de carga 
                * / 
                // determina si hay un error (de caducidad token), y la ruta actual no es de inicio de sesión, y luego saltar a la página de inicio de sesión y la ruta completa de la banda actual Durante la última 
                SI (response.data.err == 2 && router.currentRoute.fullPath.includes ( "/ la sesión"! )) { 
                    router.push ({ruta: "/ el inicio de sesión" , Pregunta: {ruta: router.currentRoute.ruta completa}});
                } 
                Respuesta; 
            }, (error) => {
                 retorno Promise.reject (error) 
            }) // La exposición externa 
            de exportación por defecto Axios; regreso

            
        Axios utiliza para reemplazar el paquete original cuando se utilizan axios ②Home.vue:
            importar axios de "../plugins/axios";
    (5) Los axios montaje de la ventana:
        ①src / types / index.ts 中:
            // definir variables globales, redefinió interfaz de ventana 
            DECLARE {Global 
                ventana de la interfaz { 
                    Axios (config: AxiosRequestConfig): AxiosPromise <ANY> 
                } 
            }
        ②axios interceptor del tiempo de exposición externa para añadir:
            window.axios = axios;
        ③main.js introducido:
            "importación" ./plugins/axios
        ④Home.vue sin introducir ningún axios en uso, () utilizando directamente window.axios:
            montada (): void { 
                window.axios ({ 
                    url: "/ v3 / página de inicio" 
                }). entonces ( 
                    res => console.log (res.data) 
                ) 
            }
        

### lógica de validación de inicio de sesión

    ①axios.ts bloqueador de respuesta utilizado router.currentRoute.fullPath destinado puede obtener la ruta actual, para retener la dirección actual:
        // determinar si hay un error (token expirado), y la ruta actual no es de inicio de sesión, y luego saltar a la página de inicio de sesión y la ruta completa actual con el pasado 
        SI (response.data.err == 2 &&! Router.currentRoute.fullPath. incluye ( "/ login" )) { 
            router.push ({ruta: "/ login" , Pregunta: {ruta: router.currentRoute.fullPath}}); 
        }
    solicitud ②Login.vue cuando inicio de sesión, si no hay error, el depósito de contadores a localStorage, y saltar a la interceptor respuesta de enrutamiento de retenido:
        < Botón @Haga clic = "login" >登录</ botón >
        exportación por defecto la clase de sesión se extiende Vue { 
            inicio de sesión pública (): void { 
                window.axios ({ 
                    url: "/ api / login" , 
                    método: "post" , 
                    los datos: {nombre de usuario: "Chenghao", contraseña: "chenghao123" } 
                } ) .then ( 
                    res => {
                         si (res.data.err == 0 ) {
                             // 种contador到localStorage中 
                            window.localStorage.setItem ( "usuario", JSON.stringify (res.data))
                             // antes del salto a la página de 
                            la presente . $ Router.replace ( el este . $ Route.query.path Cadena) 
                        } 
                    } 
                ) 
            } 
        }

 

Gestión del Estado ###

    Instalación ①: NPM i vuex vuex clase -S

 

    Continuará ......




Supongo que te gusta

Origin www.cnblogs.com/wuqilang/p/12508315.html
Recomendado
Clasificación