Vue 前端路由 vue-router

一、前端路由css

後端路由:多頁面,服務器端渲染好返回給瀏覽器。html

前端路由:改變url不向服務器發送請求;前端能夠監聽url變化;前端能夠解析url並執行相應操做。前端

 

先後端分離:後端只提供API來返回數據,前端經過ajax獲取數據後,在經過必定的方式渲染到頁面上。vue

SPA:先後端分離+前端路由。webpack

SPA只有一個html文件,整個網站的全部內容都在這一個html裏,經過js來處理。git

 

二、vue-routergithub

路由不一樣的頁面實時上就是加載不一樣的組件。web

 

三、示例ajax

github地址:https://github.com/MengFangui/VueRoutervue-router

須要安裝vue-router

(1)加載插件

import Vue from 'vue'; import VueRouter from 'vue-router'; import App from './app.vue'; //加載vue-router插件
Vue.use(VueRouter);

 注意:from後的模塊都是小寫

(2)路由設置

// 路由配置,配置路由匹配列表 //webpack會把每個路由打包爲一個js文件,在請求該頁面時,加載這個頁面的js,異步實現懶加載(按需加載)
const Routers = [ { //匹配的路徑
        path: '/index', //  meta: { title: '首頁' }, //映射的組件
        component: (resolve) => require(['./views/index.vue'], resolve) }, { path: '/about', meta: { title: '關於' }, component: (resolve) => require(['./views/about.vue'], resolve) }, { //路由到同一個頁面,數據不一樣
        path: '/user/:id', meta: { title: '我的主頁' }, component: (resolve) => require(['./views/user.vue'], resolve) }, //訪問的路徑不存在時,重定向到首頁。
 { path: '*', redirect: '/index' } ]; const RouterConfig = { // 使用 HTML5 的 History 路由模式,經過‘/’設置路徑
    mode: 'history', routes: Routers }; const router = new VueRouter(RouterConfig);

 注意:path屬性值後有'/'.

component: (resolve) => require(['./views/user.vue'], resolve)
resolve實現異步加載,按需加載


命名路由使用:
{ //匹配的路徑
        path: '/index', //常量參數定義
 meta: { title: '首頁' }, //命名路由
        name:'index', //映射的組件
        component: (resolve) => require(['./views/index.vue'], resolve) }
 
<router-link :to="{name:'about'}">跳轉到 about</router-link>

命名路由的配置好處是:路徑都在main.js中配置好了,改變路徑的話只須要在main.js中配置便可,不須要在全部使用的地方進行配置

 

(3)將將每一個頁面的樣式都打包到一個css文件,webpack.config.js

plugins: [ //css單獨打
        new ExtractTextPlugin({ filename: '[name].css', //將每一個頁面的樣式都打包到一個css文件
            allChunks: true }) ]

 

(4)配置webpack-dev-server支持history路由

"scripts": { "dev": "webpack-dev-server --open --history-api-fallback --config webpack.config.js", "bulid": "webpack --progress --hide-modules --config webpack.prod.config.js" },
--history-api-fallback  全部的路由都指向index.html

(5)掛載路由組件
<template>
    <div>
        <router-view></router-view>
    </div>
</template>
<script> export default { } </script>

 

(6)跳轉

方式1:

<template>
    <div>
        <h1>首頁</h1>
        <!--router-link會渲染爲一個a標籤 實現跳轉的方式1-->
        <!--router-link 的tag屬性 指定渲染成什麼標籤-->
        <!--router-link 的replace屬性 不會留下history記錄,不能使用後退鍵-->
        <!--router-link 的active-class屬性 路由匹配成功時會自動給當前元素設置爲一個名爲router-link-active的class-->
        <router-link to="/about">跳轉到 about</router-link>
    </div>
</template>
<script> export default { } </script>

to是一個屬性,一樣可使用v-bind進行動態設置。如:

 

<router-link :to="{name:'about'}">跳轉到 about</router-link>

 

 

 

 

方法二:

<template>
    <div>
        <h1>介紹頁</h1>
        <button @click="handleRouter">跳轉到 user</button>
    </div>
</template>
<script> export default { methods: { handleRouter () { //實現跳轉的方式2
                this.$router.push('/user/123'); //不會向history添加新紀錄
                //this.$router.replace('/user/123');
                //在hsitory中前進或者後退多少步
                this.$router.go(-1); } } } </script>

 

(7)導航鉤子

//導航鉤子,beforeEach路由改變前觸發 //to形參 即將進入的路由對象 //from 即將離開的路由對象 //next 調用改方法後才能進入下一個鉤子,設置爲false時,能夠取消導航,設置爲具體路徑時能夠導航到指定的頁面next(‘/login’)
 router.beforeEach((to, from, next) => { window.document.title = to.meta.title; next(); }); 

//導航鉤子,afterEach路由改變後觸發

router.afterEach((to, from, next) => { window.scrollTo(0, 0); });

 next(false):next的參數設置爲false時,取消導航/跳轉效果

 (8)虛擬DOM

new Vue({ el: '#app', router: router11, render: h => { return h(App) } });

注意:Vue 在建立 Vue 實例時,經過調用 render 方法來渲染實例的 DOM 樹。

h就是createElement,只是換了一個名稱

Vue 在調用 render 方法時,會傳入一個 createElement 函數做爲參數,也就是這裏的 h 的實參是 createElement 函數,而後 createElement 會以 APP 爲參數進行調用

 

(9)Vue組件須要一個標籤進行包裹(如div)

<template>
    <div>
        <h1>首頁</h1>
        <!--router-link會渲染爲一個a標籤 實現跳轉的方式1-->
        <!--router-link 的tag屬性 指定渲染成什麼標籤-->
        <!--router-link 的replace屬性 不會留下history記錄,不能使用後退鍵-->
        <!--router-link 的active-class屬性 路由匹配成功時會自動給當前元素設置爲一個名爲router-link-active的class-->
        <router-link to="/about">跳轉到 about</router-link>
    </div>
</template>
相關文章
相關標籤/搜索