vue學習筆記 十五、元件掛載過程及query方式帶引數的頁面跳轉
阿新 • • 發佈:2021-10-13
一、 元件載入順序
元件掛載的順序 setup() -> onMounted()->onUnmounted()
主要作用:
setup():元件啟動入口
onMounted():發請求 向後端你請求資料、資料初始化
onUnmounted():元件解除安裝時的生命週期,清除定時器 清除閉包函式
二、 專案結構截圖
三、程式碼:
預期流程:先建立一個Start.vue 登入http://localhost:8080/ 後先跳轉到Start.vue元件,在Start.vue組建中向Home.vue跳轉並帶有引數,觀察元件的載入順序和引數傳遞情況。
index.js
import { createRouter, createWebHistory,createWebHashHistory } from 'vue-router' import Start from '../views/Start.vue' //路由的配置屬組 //paht:路由路勁 必須以/開頭 必填 //component:對應的路由元件 必填 //name:路由的名字 const routes = [ { path: '/', name: 'Start', component: Start }, { path: '/home', name: 'Home', //按需引入 //如果沒有訪問/about 就不會載入這個元件 節約效能 component: () => import( '../views/Home.vue') }, { path: '/about', name: 'About', //按需引入 //如果沒有訪問/about 就不會載入這個元件 節約效能 component: () => import( '../views/About.vue') } ] //建立路由物件 const router = createRouter({ //createWebHashHistory hash模式路徑前面會多一個#號 history: createWebHistory(process.env.BASE_URL), routes }) export default router
Start.vue
<template> <div> <button @click="start">開始任務</button> </div> </template> <script> import {defineComponent,ref,onMounted,onUnmounted} from 'vue' import {useRouter} from 'vue-router' export default defineComponent({ name :'Start', setup(){ //setup元件建立的過程 let router = useRouter() let name = ref('jack') let num =ref(10) let obj =ref({ msg:'start' }) onMounted(()=>{ console.log('onMounted') }) onUnmounted(()=>{ console.log('onUnmounted') }) console.log('setup') let start = ()=> { //push如果是傳的物件的形式 就可以傳遞引數 //query 傳參 //push裡面還可以傳入name, name是路由名字index.js裡定義的 //query傳參path和name都可以 傳遞引數 引數在位址列裡 重新整理後引數還在 router.push({ //path : '/home', name:'Home', query:{ //前面的name可以隨便取 name:name.value, num:num.value, obj:JSON.stringify(obj) } }) } return { start } } }) </script> <style> </style>
Home.vue
<template> <div> <h1>這是Home page</h1> </div> </template> <script> //編寫js內容 import {defineComponent,computed,ref } from 'vue' import {useStore} from 'vuex' import {useRouter,useRoute} from 'vue-router' export default defineComponent({ name:'Home', components:{ }, setup(){ //router 是全域性路由物件 let router = useRouter() console.log(router) //route是當前路由物件 let route = useRoute() console.log(route.query) //query傳遞過來的引數 都是字串的型別 console.log(route.query.name) console.log(route.query.num) console.log(route.query.obj) let num = ref(null) let name = ref('') let obj =ref({}) return{ } } }) </script> <style scoped lang="scss"> </style>
四、效果
1、進入Start.vue元件 ,先執行了setup()方法 ,然後執行onMounted()
2、點選了“開始任務”按鈕後,跳轉到Home.vue元件,觀察位址列引數會顯示在位址列中,並且在Home.vue列印了接收到的引數,並且執行了Start.vue 元件中的onMounted()的方法。