回覆列表
  • 1 # 輕浮生

    vue-router的基本配置

    為了方便新學者的閱讀與理解。先來看一下最基本的路由是如何配置的

    // 0. 匯入Vue和VueRouter指令碼,如果使用模組化機制程式設計,要呼叫 Vue.use(VueRouter)

    // 1. 定義 (路由) 元件。

    // 可以從其他檔案 import 進來

    const Foo = { template: "<div>foo</div>" }

    const Bar = { template: "<div>bar</div>" }

    // 2. 定義路由

    // 每個路由應該對映一個元件。

    const routes = [

    { path: "/foo", component: Foo },

    { path: "/bar", component: Bar }

    ]

    // 3. 建立 router 例項,然後傳 `routes` 配置

    // 你還可以傳別的配置引數, 不過先這麼簡單著吧。

    const router = new VueRouter({

    routes // (縮寫) 相當於 routes: routes

    })

    // 4. 建立和掛載根例項。

    // 記得要透過 router 配置引數注入路由,

    // 從而讓整個應用都有路由功能

    const app = new Vue({

    router

    }).$mount("#app")

    如果具體還要什麼不懂的,還是多看官方文件 把

    便於擴充套件的路由設定

    到這裡我當你已經比較熟悉路由配置的相關知識哦,很細的知識點我就不細說了。

    場景1

    假設你現在接到一個新專案,產品經理要求你開發一個系統,給你的互動圖等資料都是關於系統內部的各個頁面。 這時你以為開發的這個系統就僅僅是直接展示系統內部的情況了,甚至你啥都沒想,就直接開始配置路由寫頁面去了。

    一開始你差不多寫出了以下的路由配置:

    // example 1

    const router = new VueRouter({

    routes: [

    { path: "/page1", component: Page1 },

    { path: "/page2", component: Page2 }

    ]

    });

    像這種配置的,大概就猜出你把系統的選單等公共部分都放在App.vue裡寫好了,然後透過一個<router-view/>進行系統內容的變更。

    場景2

    後面產品經理跟你說,要系統加一個官網、首頁之類的存在。!!如果你配了按照上述的路由情況,此時,你是不是有點懵呢?因為你把系統的公共內容如選單都寫在App.vue上了,但是首頁不需要系統的這些部分。

    儘管你再配出了一個首頁的路由,但是你也要想辦法去掉那些已有的系統公共部分。

    解決方案

    所以我們不能採用上述配置方式。此時我們應該把系統本身作為一個路由,系統公共部分寫在這個路由對映元件上,而系統內部各頁作為子路由,巢狀在其下。

    // example 2

    const router = new VueRouter({

    routes: [

    {

    path: "/"

    component: Main,

    children: [

    {

    path: "/page1",

    component: Page1

    },

    {

    path: "/page2",

    component: Page2

    }

    ]

    }

    ]

    });

    這裡的Main元件就是系統的入口,選單等公共部分就是寫在這裡

    此時App.vue檔案的內容應該就直接是一個路由入口了

    <template>

    <div>

    <router-view/>

    </div>

    </template>

    如果你一開始是這麼寫的話,那麼要新增一些非系統內部的頁面,簡直就輕而易舉了。如新增個首頁,直接新增個一級路由就好了

    // example 3

    const router = new VueRouter({

    routes: [

    {

    path: "/"

    component: Main,

    children: [...]

    },

    {

    path: "/home"

    component: Home

    }

    ]

    });

    但是此時我們應該要知道,當僅輸入你的網站域名(沒有具體到哪頁)時,會預設開啟path: /的頁面,上述例子就是預設開啟系統頁面了。

    場景3

    你的產品經理又來找事啦。再要求你添加個非系統頁,如登入註冊頁,開啟網站地址域名時預設跳轉到登入頁。

    嗯,按照上一個配置情況,新增一個登入頁簡直so easy,但是要改預設開啟頁,這就尷尬了。

    有人說,直接把系統的那個一級路由改一下不就好了嘛,然後把path: /留給要求預設開啟的頁面。

    嗯,你說的很有道理,但我,不聽!假設你係統裡有比較多的跳轉,從系統內某一頁跳轉到某一頁的情況多,即你已經在程式碼裡寫了很多個$router.push("xxxx"),如果這麼一改,很麻煩,要一個個找出來進行修改。

    解決方案

    因此,我們一開始的時候,就不應該為系統頁直接佔用path: "/"的路由。但是也不能為目前已知的任何一個頁面佔用path: "/",因為即使你現在明確哪個頁面是預設開啟頁,但是你不能保證你的產品經理不會變心啊,萬一後面又要改呢?

    所以!我們要為目前已知的每個頁面都設定路徑名,而不能佔用path: "/";而實現預設開啟的功能,就要利用redirect進行跳轉

    // example 4

    const router = new VueRouter({

    routes: [

    {

    path: "/main"

    component: Main,

    children: [...]

    },

    {

    path: "/home"

    component: Home

    },

    {

    path: "login",

    component: Login

    },

    {

    path: "/",

    redirect: "/login"

    }

    ]

    });

  • 中秋節和大豐收的關聯?
  • 矮化文竹怎麼回事?