天天看點

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

描述:

最近想弄一個自己的個人首頁,正好vue3也已經出來了,想嘗鮮,于是便用vue3來建構了自己的項目,結果處處碰壁,不過這是好事,說明又有很多新的東西學了(等會,我2.x還沒學廢(ಥ﹏ಥ))。好的,接下來要分享的是在vue3中要怎麼去使用router路由。

小提示:

建立vue3項目的指令行依舊沒變:

vue create "項目名"

如果你在建立vue3項目時選擇的是手動選擇功能方式,并且把

Router

勾選了,那麼可以直接跳過安裝流程,官方模闆會搭建好router環境。

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:
vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

如果選擇的是預設模闆,那麼就先按着流程安裝搭建完router

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

安裝搭建:

vue3的改動較大,是以之前的版本路由已經不适用了,目前直接安裝路由是3.x版本的,我們要指定

router4

進行安裝,安裝不了就用淘寶鏡像。

npm install vue-router@4 --save
           

router-link的使用好像沒啥變化,并且官方的模闆裡有,我就不說了,我們主要來看看頁面與頁面間的跳轉有啥變化

接着我們在src目錄下建立

router

檔案夾,在裡面建立

index.js

檔案,接着再建立一個

views

檔案夾,在裡邊建立兩vue檔案用于頁面的跳轉A --▶B

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

然後我們在router檔案夾的index.js檔案裡添加下面的代碼,你會驚奇的發現,Vue對象去哪兒了?在2.x中,我們要使用路由是要先

import Vue from 'vue'

把Vue引入進來,接着再

Vue.use(VueRouter)

去初始化使用路由,是的,vue3中已經沒有全局的Vue對象了,并且

vue-router

也變得子產品化了,

routes

引入頁面的兩種方式沒啥改變,倒是history已經子產品化了,它有幾種方式,我們使用

createWebHistory

就好了,就是浏覽器URL後面帶不帶#号小尾巴的差別。

import { createRouter, createWebHistory } from 'vue-router'
import A from '../views/A.vue'

const routes = [
    // { path: "/", redirect: "/index" },
    {
        path: '/',
        name: 'A',
        component: A
    },
    {
        path: '/B',
        name: 'B',
        component: () =>
            import ('../views/B.vue')
    }
]

const router = createRouter({
    //history模式:createWebHistory , hash模式:createWebHashHistory
    history: createWebHistory(process.env.BASE_URL),
    routes
})

export default router
           

接着在

main.js

檔案裡修改添加下面的代碼,使用router的話在

createApp

子產品裡挂載一下就好了,需要注意的是必須要在

mount

之前挂載

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

createApp(App).use(router).mount('#app')
           

最後在App.vue裡面引用一下

<router-view/>

元件就把環境都弄好了,記得把之前模闆自帶的東西清理了就好。

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

使用:

我們先在之前建立的

A.vue

檔案中添加下面代碼

<template>
  <div @click="goToB">Page A</div>
</template>
<script>
import { useRouter } from "vue-router";
export default {
  setup() {
    const router = useRouter();
    const goToB = () => {
      router.push({
        name: "B",
      });
    };
    //也可以這樣寫
    // function goToB() {
    //   router.push({
    //     name: "B",
    //   });
    // }
    return {
      goToB,
    };
  },
  data() {
    return {};
  },
  methods: {},
};
</script>
           

接着在

B.vue

檔案中随便添加點東西,能顯示就好

<template>
  <div>Page B</div>
</template>
           

然後我們再回看A檔案,你會發現找不到

this.$router.push()

,是的,vue3中已經沒有全局的路由了,需要使用路由,我需先要引入useRouter子產品,接着要在setup函數中定義router,之後再建立一個方法,裡面才是我們熟悉的

router.push({ name: "B"})

,這裡不要用this,setup函數中是沒有this的,到這裡簡單的跳轉就算完成了。

效果圖:

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

❀methods函數裡面調用:

通常我們跳轉都是在處理完了一些事情後再調用的,是以,如果我們想在methods函數裡執行隻需要

this.定義的函數名

就可以了。

<template>
  <div @click="test">Page A</div>
</template>
<script>
import { useRouter } from "vue-router";
export default {
  setup() {
    const router = useRouter();
    const goToB = () => {
      router.push({
        name: "B",
      });
    };
    return {
      goToB,
    };
  },
  data() {
    return {};
  },
  methods: {
    test() {
      /*
       * do something...
       */
      this.goToB();
    },
  },
};
</script>
           

❀傳參:

接着上面,既然在methods函數裡可以調用了setup() 裡return的方法,那是不是意味着我們可以傳點東西過去?

A.vue檔案:

是的,我們可以傳參數過去,這樣我們就可以把這個自定義的跳轉函數封裝起來,動态的傳入頁面名稱和參數就好了

<template>
  <div @click="test">Page A</div>
</template>
<script>
import { useRouter } from "vue-router";
export default {
  setup() {
    const router = useRouter();
    const goToOtherPage = (page_name, value) => {
      router.push({
        name: page_name,
        params: {
          value: value,
        },
      });
    };
    return {
      goToOtherPage,
    };
  },
  data() {
    return {};
  },
  methods: {
    test() {
      /*
       * do something...
       */
      //要跳轉的頁面名稱
      let page_name = "B";
      //要傳的參數
      let value = "hello vue3";
      this.goToOtherPage(page_name, value);
    },
  },
};
</script>
           

B.vue檔案:

接着我們要怎麼接受參數咧?搞了那麼久,其實配方都是一樣的,要接受參數,我需要想引入

useRoute

,注意是沒有r結尾的,是不是有種很熟悉的味道同志們=》

this.$route.params

,接着也要在setup函數裡定義route,接着我們就可以以方法的形式傳回params,要使用的話this一下就好了,生命周期函數created、mounted裡面都可以直接拿到。

<template>
  <div>Page B</div>
</template>
<script>
import { useRoute } from "vue-router";
export default {
  setup() {
    const route = useRoute();
    const getParams = () => {
      return route.params;
    };
    return {
      getParams,
    };
  },
  data() {
    return {};
  },
  methods: {},
  created: function () {
    console.log(`created:` + JSON.stringify(this.getParams()));
  },
  mounted: function () {
    console.log("mounted:" + this.getParams().value);
  },
};
</script>
           

效果圖:

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參:

最後别忘了幹正事哦!!

vue3中怎麼使用router路由咧?頁面跳轉傳參怎麼搞?描述:小提示:安裝搭建:使用:❀methods函數裡面調用:❀傳參: