1. 程式人生 > >Vue.js系列之vue-router(中)(4)

Vue.js系列之vue-router(中)(4)

說明:

我們專案現在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3
如果大家在實踐的過程中與本文所說的內容有較大區別的話看看是不是版本問題。
本文是一系列文章,在我對Vue有了更深刻的理解認識之後會對文章及時進行修改或更正。歡迎大家批評指出錯誤。以下是已完成的文章列表。

補充

對於上篇分享的router.js檔案補充以下三點:

1.新建好的router.js檔案要想起作用,需要在main.js中import進來。

/*引入路由設定*/
import "./routers.js"

2.如果你在options裡聲明瞭掛載的el,就不用再手動mount了

var app = new Vue({
    el: '#app',  //不需要
    router,
    render: h => h(App) //新新增的函式操作
}).$mount('#app');

3.第二點看到,我們新加了render: h => h(App) 一開始我沒看懂,直接註釋執行看下,結果<div id="app"></div> 這個容器裡面就啥也沒有渲染出來。我也不怎麼理解,如果有大牛清楚的懇請留言指導一下啊。但是我還是查了一下資料。

//=> 是ES6的箭頭語法
// ES5  
(function (h) {  
  return
h(App); }); // ES6 h => h(App);

官方文件說明1:

render: function (createElement) {
    return createElement(
      'h' + this.level,   // tag name 標籤名稱
      this.$slots.default // 子元件中的陣列
    )
  }

官方文件說明2:
render
型別:Function
詳細:字串模板的代替方案,允許你發揮 JavaScript 最大的程式設計能力。render 函式接收一個 createElement 方法作為第一個引數用來建立 VNode。
我是這麼理解的,我們的路由跳轉時,定位到了一個元件進行渲染,但是之前app這個容器裡面是有其他元件的,我們不能直接新增進去,只能把app裡面的模板檔案替換掉,所以用這個字串模板的代替方案render(不知道對不對,真心請大神指出,大家這裡略過吧)。

懶載入

懶載入的必要性:

1.解決樣式衝突問題
2.解決頁面資源載入問題
3.路由被訪問時才載入對應元件,提高應用載入效率

具體程式碼寫法

關鍵我們要做的就是把之前普通import進來的元件定義成非同步元件。
前:

import home form "./components/home"  
import login form "./components/login" 

後:

const home = resolve => require(['./home.vue'], resolve)
const login = resolve => require(['./login.vue'], resolve)

Router構造詳細配置

const router = new VueRouter({
    mode: 'history',//history: 依賴 HTML5 History API 和伺服器配置。
    base: __dirname,
    linkActiveClass:'link-active',
    scrollBehavior (to, from, savedPosition) {
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
    }
    routes
}) 

mode
預設’hash’值,但是hash看起來就像無意義的字元排列,不太好看也不符合我們一般的網址瀏覽習慣。
當你使用 history 模式時,URL 就像正常的 url,例如 http://wx.hq88.com/lms/,也好看!

base
預設值: “/”,應用的基路徑,一般就是專案的根目錄,webpack中有配置好。

var projectRoot = path.resolve(__dirname, '../')

linkActiveClass
預設值: “router-link-active”,就是當前元件被啟用,相應路由會自動新增類”router-link-active”,這裡是為了全域性設定啟用類名,如果不設定,直接用預設的也是可以的。

scrollBehavior
通過這個這個屬性(是個函式),可以讓應用像瀏覽器的原生表現那樣,在按下 後退/前進 按鈕時,簡單地讓頁面滾動到頂部或原來的位置。

完整路由程式碼

const scrollBehavior = (to, from, savedPosition) => {
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
    }

routes: [
    {
      path: '/',
      name: 'home',
      component: function(reslove){
        return require(['./components/home'],reslove)
      }
    },
    {
      path: '/login',
      name: 'login',
      component: function(reslove){
        return require(['./components/login/login'],reslove)
      }
    }
 ]
// 建立一個路由器例項,並且配置路由規則
const router = new VueRouter({
    mode: 'history',
    base: __dirname,
    linkActiveClass:'link-active',
    scrollBehavior,
    routes
});
//建立和掛載根例項
const app = new Vue({
  router: router,
  render: h => h(App)
}).$mount('#app');

總結

中篇主要對上篇遺漏的點進行了補充,分享了 懶載入的實現以及Router構造詳細配置,最終形成了我們專案中用的router.js。下篇我將繼續分享路由知識,主要是一些小的知識點,但是在應用的過程中不可或缺。

1.當前路由新增啟用狀態active-class
2.路由跳轉時新增過渡動效
3.路由傳參及命名路由
4.程式設計式導航
5.router-link的其他表現形式

相關推薦

Vue.js系列專案結構說明2

說明: 我們專案現在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3 如果大家在實踐的過程中與本文所說的內容有較大區別的話看看是不是版本問題。 本文是一系列文章,在我對V

Vue.js系列vue-router()4

說明: 我們專案現在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3 如果大家在實踐的過程中與本文所說的內容有較大區別的話看看是不是版本問題。 本文是一系列文章,在我對V

Vue.js系列vue-router(上) 轉載自向朔1992

app 指定 路徑和 其他 發現 掛載 我只 router mine 概述 Vue非常適用於實踐單頁面應用程序也就是平時大家說的比較多的SPA(single page application),這點應該了解過Vue的應該都知道吧。一般的單頁面應用是基於路由或頁面之間的鏈接來

Vue.js系列vue-router(下)5

說明: 我們專案現在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3 如果大家在實踐的過程中與本文所說的內容有較大區別的話看看是不是版本問題。 本文是一系列文章,在我對V

Vue.js系列項目搭建vue2.0 + vue-cli + webpack

項目搭建 cnblogs 技術 tro gis vue.js 應用 vue-cli web 1、安裝node node.js環境(npm包管理器) cnpm npm的淘寶鏡像 從node.js官網下載並安裝node,安裝過程很簡單,一路“下一步”就可以了(傻瓜式安裝)。

深入理解系列JAVA資料結構4——Hashtable

1、Hashtable和HashMap,從儲存結構和實現來講基本上都是相同的, Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類,但二者都實現了Map介面。 2、它和HashMap的最大的不同是它是

ORM系列二:EF4 Model First

  前面我們已經介紹過EF中Code First開發模式,簡而言之,就是不管三七二十一直接寫程式碼,不過對於很多開發人員來說,可能並不習慣這樣來開發,並且安裝標準的開發流程,應該是先建模再進行編碼,當然EF也是支援這樣做的,那我們今天就簡單介紹一些現有模型的開發模式——Model First。   具

Vue.js系列專案搭建1

說明: 我們專案現在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3 如果大家在實踐的過程中與本文所說的內容有較大區別的話看看是不是版本問題。 本文是一系列文章,在我對V

Vue.js 生態vue-router

onerror vue 重定向 跳轉 圖片 clas query code 傳遞 vue-router是什麽~~ vue-router是Vue的路由系統,定位資源的,我們可以不進行整頁刷新去切換頁面內容。 vue-router的安裝和基本配置 vue-rout

Vue.js系列專案結構說明

轉:https://www.jb51.net/article/111658.htm 前言 在上一篇專案搭建文章中,我們已經下載安裝了node環境以及vue-cli,並且已經成功構建了一個vue-cli專案,那麼接下來,我們來梳理一下vue-cli專案的結構。 總體框架 一個

2018年11月10日 關於Vue.js生態Vue-router and 傳參方式

關於router的用法 //在html中的相關程式碼 <div id="app"> <div> <router-link to="/">首頁</router-link> //<router-link>是Vue-route

2018年11月10日 關於Vue.js生態Vue-router and 傳參方式

關於router的用法 //在html中的相關程式碼 <div id="app"> <div> <router-link to="/">首頁</router-link> //<router-link&

vue.js實戰學習——內置指令

name 初始 節點 刪除 html元素 data post 編譯 16px 註:此內容摘抄自:梁灝的《Vue.js實戰》 註:記得要引入vue.js才能運行哦,文章中貼出的代碼直接復制是不行的,html css js 都放在了一起,而且也沒有引用vue.js。 1.v

vue.js 跨域的解決方法轉載

vue專案中,前端與後臺進行資料請求或者提交的時候,如果後臺沒有設定跨域,前端本地除錯程式碼的時候就會報“No 'Access-Control-Allow-Origin' header is present on the requested resource.” 這種跨域錯誤。 要想本地正常的除錯,解決

如何對第一個Vue.js組件進行單元測試

發生 清理 定位元素 after 斷言 www. array 12c 良好的 我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的組件,並將其存儲在我們將執行斷言的變量中。我們還可以通過propsData屬性傳遞道具作為對象。

Vue.js 2.0 教程精華梳理 基礎

Vue.js 第一部分 Vue.js 介紹 Vue.js(讀音 /vjuː/, 類似於 view) 是一套構建使用者介面的 漸進式框架。與其他重量級框架不同的是,Vue 採用自底向上增量開發的設計。Vue 的核心庫只關注檢視層,並且非常容易學習,非常容易與其

Vue+webpack構建單頁router應用

巢狀路由 其實很簡單,主要是vue2.0有一些變更。 所以要多看API文件,少看網上的教程 = = 配置路由 配置路由,這裡為Home配置了兩個子路由news和message const routes = [{ path: '/Hello'

VUe+webpack構建單頁router應用

前期看了很多webpack的介紹,之前一直用requireJS或者browserify,真正決心來使用webpack,實在是因為webpack好像確實功能更全。 這期想做的是通過webpack和vue-router搭建一個單頁應用,並且將vue的transit

java設計模式系列設計模式概要1

而不是 行為型模式 一句話 創建 rom 多次 ati 代理模式 之間 一、什麽是設計模式   設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

Appium python自動化測試系列appium環境搭建

ftp 自動化 手動 文件 搭建環境 做到 安裝python reg 成員 ?2.1 基礎環境搭建 當我們學習新的一項技術開始基本都是從環境搭建開始,本書除了第一章節也是的,如果你連最基礎的環境都沒有那麽我們也沒必要去說太多,大概介紹一下: 1、因為appium是支持and