vue-router 路由和前端狀態(tài)管理

vue-router

Vue Router 是 Vue.js 官方的 路由管理器
前端 來控制頁面的跳轉(zhuǎn)(但其實是個單頁面),根據(jù)不同的 url 地址展示不同的內(nèi)容和頁面骗爆。

  • 優(yōu)點:體驗好芹敌,不需要每次從服務(wù)器獲取全部荧止,快速展現(xiàn)給用戶吹泡;
  • 缺點:不利于SEO;使用瀏覽器的前進(jìn)器瘪,后退鍵的時候會重新發(fā)送請求翠储,沒有合理的利用緩存;單頁面無法記住之前滾動的位置娱局,無法在前進(jìn)和后退的時候記住滾動的位置彰亥。

路由的基本加載

簡單四步走

  1. 安裝
npm install --save vue-router
  1. 引用
import router from 'vue-router'
Vue.use(router)
  1. 配置路由文件,并在 vue 實例中注入
var rt = new router({
  routes:[{
    path:'/',//指定要跳轉(zhuǎn)的路徑
    component:HelloWorld//指定要跳轉(zhuǎn)的組件
  }]
})
new Vue({
  el: '#app',
  router:router,
  components: { App },
  template: '<App/>'
})
  1. 確定視圖加載的位置
<router-view></router-view>

路由的跳轉(zhuǎn)

<router-link to="/"></router-link>

<template>
  <ul>
    <li>
      <router-link to="/helloworld">HELLO WORLD</router-link>
    </li>
    <li>
      <router-link to="/helloearth">HELLO EARTH</router-link>
    </li>
  </ul>
</template>

路由參數(shù)的傳遞

使用 params

···/helloworld/你好世界
路由:

  1. 必須在路由內(nèi)加入路由的 name
  2. 必須在 path 后加 /: +傳遞的參數(shù)
export default new router({
  routes: [{
    name: 'helloworld',
    path: '/helloworld/:worldmsg', // 指定要跳轉(zhuǎn)的路徑
    component: HelloWorld // 指定要跳轉(zhuǎn)的組件
  }, {
    name: 'helloearth',
    path: '/helloearth/:earthmsg',
    component: HelloEarth
  }]
})

傳遞參數(shù):

<router-link :to="{name: helloearth,params:{msg: 只有一個地球}}">
  HELLO WORLD
</router-link>

接收參數(shù):

$route.params.earthmsg
使用 query

···/helloworld?name=xxx&count=yyy
路由:
你可以創(chuàng)建一個函數(shù)返回 props衰齐。這樣你便可以將參數(shù)轉(zhuǎn)換成另一種類型,將靜態(tài)值與基于路由的值結(jié)合等等继阻。

const router = new VueRouter({
  routes: [{
    path: '/search', 
    component: SearchUser, 
    props: (route) => ({msg: route.query.msg}) 
  }]
})

傳遞參數(shù):

<router-link :to="{path: '/helloearth',query:{msg: 只有一個地球}}">
  HELLO WORLD
</router-link>

接收參數(shù):

{{msg}}

Axios

axios的簡介

axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端耻涛,它本身具有以下特征:

  • 從瀏覽器中創(chuàng)建 XMLHttpRequest
  • 從 node.js 發(fā)出 http 請求
  • 支持 Promise API
  • 攔截請求和響應(yīng)
  • 轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)
  • 取消請求
  • 自動轉(zhuǎn)換JSON數(shù)據(jù)
  • 客戶端支持防止 CSRF/XSRF
  1. 安裝
npm install axios
  1. 引入加載
import axios from 'axios'
  1. 將 axios 全局掛載到 VUE 原型上
Vue.prototype.$http = axios

get 請求

getData(){
  this.$http.get('https://cnodejs.org/api/v1/topics', {
    params: {
      page: 1,
      limit: 10
    }
  })
    .then(response => {
      this.items = response.data.data
    })
    .catch(error => {
      console.log(error)
    })
}

兩種傳遞參數(shù)的形式:

axios.get('https://cnodejs.org/api/v1/topics', {
    params: {
      page: 1,
      limit: 10
    }
  })
axios.get('https://cnodejs.org/api/v1/topics?page=1&limit=10')

post 請求

POST 傳遞數(shù)據(jù)有兩種格式:

  • form-data?page=1&limit=10
  • x--www--form--urlencoded { page: 1, limit: 10 }

在axios中,post請求接收的參數(shù)必須是 form-data瘟檩,
需要使用 qs 插件的 -qs.stringify 方法抹缕。

postData(){
  this.$http.post(url, qs.stringify({
    page: 1,
    limit: 10
  }))
    .then(response => {
      this.items = response.data.data
    })
    .catch(error => {
      console.log(error)
    })
}

Vuex

store

用來管理狀態(tài),共享數(shù)據(jù)墨辛,在各個組件之間管理外部狀態(tài)卓研。
如何使用 Vuex 獲取狀態(tài)?
第一步:引入 vuex睹簇,并通過 use 方法使用它奏赘。

import Vuex from 'vuex'
Vue.use(Vuex)

第二步:創(chuàng)建狀態(tài)倉庫。

var store = new Vuex.Store({
  state: {
    XXX: xxx
  }
})
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

第三步:通過 this.$store.state.XXX 直接拿到需要的數(shù)據(jù)(獲取狀態(tài))太惠。

Vuex 的相關(guān)操作

如何改變狀態(tài)磨淌?

mutations

var store = new Vuex.Store({
  state: {
    num: 88
  },
  mutations: {
    // 定義狀態(tài)改變函數(shù)
    increase(state){
      state.num++
    },
    decrease(state){
      state.num--
    }
  }
})

通過 this.$store.commit('increase') 調(diào)用狀態(tài)改變函數(shù)。

actions

var store = new Vuex.Store({
  state: {
    num: 88
  },
  mutations: {
    // 定義狀態(tài)改變函數(shù)
    increase(state){
      state.num++
    },
    decrease(state){
      state.num--
    }
  },
  actions: {
    // context 為上下文對象
    increaseAction(context){
      // actions 中只能對 mutation 進(jìn)行操作凿渊,不直接變更狀態(tài)
      context.commit('increase')
    }
  }
})

通過 this.$store.dispatch('increaseAction') 調(diào)用梁只。
actions 可以包含異步操作缚柳,但是 mutations 只能包含同步操作。

getters

var store = new Vuex.Store({
  state: {
    num: 88
  },
  ···
  getters: {
    getNum(state){
      return state.num > 0 ? state.num : 0
    }
  }
})

通過 this.$store.getters.getNum 拿到處理后的數(shù)據(jù)搪锣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秋忙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子构舟,更是在濱河造成了極大的恐慌灰追,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旁壮,死亡現(xiàn)場離奇詭異监嗜,居然都是意外死亡,警方通過查閱死者的電腦和手機抡谐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門裁奇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人麦撵,你說我怎么就攤上這事刽肠。” “怎么了免胃?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵音五,是天一觀的道長。 經(jīng)常有香客問我羔沙,道長躺涝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任扼雏,我火速辦了婚禮坚嗜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诗充。我一直安慰自己苍蔬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布蝴蜓。 她就那樣靜靜地躺著碟绑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茎匠。 梳的紋絲不亂的頭發(fā)上格仲,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機與錄音汽抚,去河邊找鬼抓狭。 笑死,一個胖子當(dāng)著我的面吹牛造烁,可吹牛的內(nèi)容都是我干的否过。 我是一名探鬼主播午笛,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苗桂!你這毒婦竟也來了药磺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤煤伟,失蹤者是張志新(化名)和其女友劉穎癌佩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體便锨,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡围辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了放案。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姚建。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吱殉,靈堂內(nèi)的尸體忽然破棺而出掸冤,到底是詐尸還是另有隱情,我是刑警寧澤友雳,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布稿湿,位于F島的核電站,受9級特大地震影響押赊,放射性物質(zhì)發(fā)生泄漏饺藤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一流礁、第九天 我趴在偏房一處隱蔽的房頂上張望策精。 院中可真熱鬧,春花似錦崇棠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谜嫉,卻和暖如春萎坷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沐兰。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工哆档, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人住闯。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓瓜浸,卻偏偏與公主長得像澳淑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子插佛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容