前端路由和vuex狀態(tài)管理

一、前端路由的基本用法

1.安裝

npm install --save vue-router

2附迷、引用

import router from 'vue-router'   //引入路由
Vue.use(router)     // vue 提供的使用路由方法

3惧互、配置路由文件,并在vue實(shí)例中注入

var rt = new router({
    routes: [{
         path: '/',//指定要跳轉(zhuǎn)的路徑
          component: HelloWorld//指定要跳轉(zhuǎn)的組件
        }]
})
new Vue({
    el: '#app',
    router: rt,   //  在vue實(shí)例中注入路由
    components: { App },
    template: '<App/>'
})

4喇伯、 確定視圖加載的位置

<router-view></router-view>
二喊儡、vue--router路由的跳轉(zhuǎn)
<router-link to="/"></router-link>

to后面接的是需要跳轉(zhuǎn)的路徑,如下:

<router-link to="/helloworld">HELLO WORLD</router-link>
三稻据、 vue--router路由參數(shù)的傳遞

1惹恃、必須在路由內(nèi)加入路由的name

export default new router({
routes: [
    {
        name:'helloworld',   //在路由內(nèi)加入路由的name,名字可以自定義
        path: '/HelloWorld/:worldmsg',  
        component: HelloWorld  
    },
]
})

2拷肌、必須在path后加/: +傳遞的參數(shù)

export default new router({
routes: [
    {
        name:'helloworld',   
        path: '/HelloWorld/:worldmsg',  //必須在path后加 /: +傳遞的參數(shù)
        component: HelloWorld  
    },
]
})
  1. 傳遞參數(shù)
    首先在:to中引用前面定義的name名字姨俩,其中傳遞參數(shù)命名params是固定的設(shè)置鸟赫,不能更改
 <ul>
     <li>
    /* 傳遞參數(shù) */
 <router-link :to="{name:'helloworld',params:{worldmsg:'我的世界'}}">Hello World</router-link>
    </li>
 </ul>

4、接收參數(shù)
讀取參數(shù): $route.params.XXX

<template>
  <div class="hello">
    <h3>{{$route.params.worldmsg}}</h3>    //接收參數(shù)
  </div>
</template>

補(bǔ)充一點(diǎn):這是另外一種傳遞參數(shù)和接收參數(shù)方法今缚,目前用的不多算柳,后續(xù)可以再詳細(xì)了解。

<router-link
    :to="{path: '/helloearth',query:{msg: 只有一個(gè)地球}}">HELLO WORLD</router-link>
方式:===/helloworld?name=XX&count=xxx
函數(shù)模式
四姓言、 Axios之get請求詳解

axios 是一個(gè)基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端瞬项,它本身具有以下特征:
------------從瀏覽器中創(chuàng)建 XMLHttpRequest
------------從 node.js 發(fā)出 http 請求
------------支持 Promise API
------------攔截請求和響應(yīng)
------------轉(zhuǎn)換請求和響應(yīng)數(shù)據(jù)
------------取消請求
------------自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)
------------客戶端支持防止 CSRF/XSRF

  1. 安裝
npm install axios
  1. 引入加載
import axios from 'axios'
  1. 將axios全局掛載到VUE原型上
Vue.prototype.$http = axios;
  1. 發(fā)出請求 以cnode社區(qū)API為例子
methods:{
getdata:function(){
  var self =this
  this.$http.get('https://cnodejs.org/api/v1/topics',{
        params:{   //還可以用下面提到第二種傳遞參數(shù)形式
            page:1,
            limit:15
         }
    })
  .then(function(res){        //then()是promise中的方法,成功則調(diào)用事期,詳細(xì)可以看ES6
        console.log(res)
        self.items=res.data.data
        
  })
  .catch(function(err){   //catch()是promise中的方法滥壕,失敗時(shí)候調(diào)用纸颜,詳細(xì)可以看ES6
        console.log(err)
  })
},

}

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

axios.get('/user', {
      params: {
            ID: 12345
        }
})

axios.get('/user', {
      ID: 12345
  })

第二種

axios.get('https://cnodejs.org/api/v1/topics?page=1&limit=15')

使用CNODE社區(qū)官方的API為例展開學(xué)習(xí)
獲取主題列表API:https://cnodejs.org/api/v1/topics
參數(shù):page頁碼兽泣、limit 每頁顯示的數(shù)量

五、 Axios之post請求詳解

post請求和get請求沒有太大區(qū)別胁孙,在get請求基礎(chǔ)上安裝一個(gè)插件qs插件唠倦,利用qs.stringify()方法傳遞參數(shù)。

1涮较、安裝

npm install qs

2稠鼻、引入

import qs from 'qs'

 postdata:function(){
      var self =this
      this.$http.post(url,qs.stringify({
            page:1,
            limit:20
      }))
    .then(function(res){
          console.log(res)
          self.items=res.data.data
        
      })
  .catch(function(err){
        console.log(err)
    })
  },

POST傳遞數(shù)據(jù)有兩種格式:
form--data ?page=1&limit=48
x--www--form--urlencoded { page: 1,limit: 10 }

代碼已上傳到github

六、 初識(shí)Vuex之store

用來管理狀態(tài)狂票,共享數(shù)據(jù)候齿,在各個(gè)組件之間管理外部狀態(tài)

第一步:項(xiàng)目安裝vuex插件

npm i vuex

第二步:引入vuex,并通過use方法使用它

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

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

//創(chuàng)建狀態(tài)倉庫,注意第二個(gè)Store是大寫的不能改慌盯,,state也是不能改
var store = new Vuex.Store({
state:{
      XXX:xxx
      }
})

第四步:注入Vue實(shí)例當(dāng)中

 new Vue({
  el: '#app',
  router,
  store,   //注入store,當(dāng)鍵名(key)和值(value)名字一樣可以這樣縮寫
  components: { App },
  template: '<App/>'
})

第五步:通過this.$sore.state.XXX拿到全局狀態(tài)

computed:{
    getOutterNum:function(){
      return this.$store.state.XXX
    }
  }
七周霉、Vuex的相關(guān)操作

vuex狀態(tài)管理的流程
view——->actions—–>mutations—–>state——->view

一、
方法一亚皂、更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation

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

利用commit來觸發(fā)mutations函數(shù)

 methods:{
    sadd:function(){
      this.$store.commit('increase')  //commit方法里面是mutations定義的函數(shù)名
    }
  },

方法二:
利用actions中對(duì)mucations進(jìn)行操作俱箱,間接對(duì)state進(jìn)行修改

 mutations:{
    increase:function(state){
         state.num++
    },
    decrease:function(state){
         state.num--
    }
  },
  actions:{   //actions中只能對(duì)mucations進(jìn)行操作
      //context為上下文對(duì)象
     decreaseActions:function(context){
          context.commit('decrease')  //decrease方法是mucations中定義的方法
    }
  }

})

利用dispatch來觸發(fā)actions函數(shù)

saddActions:function(){
      //dispatch方法里面是actions定義的函數(shù)名
      this.$store.dispatch('decreaseActions')
    }

mucations和actions兩者之間區(qū)別
1、傳遞參數(shù)不一樣灭必,前者傳遞是state狞谱,后者傳遞是context。
2禁漓、調(diào)用的方式不一樣跟衅,前者靠this.$store.commit('xxx')觸發(fā),后者靠this.$store.dispatch('xxx')觸發(fā)播歼。
3与斤、actions可以包含異步操作,但是mutation只能包含同步操作

actions:{  
     decreaseActions:function(context){
       setTimeout(() => {     //延時(shí)一秒的異步操作
        context.commit('decrease')
       }, 1000);
    }
  }

二荚恶、getters是vuex中的一個(gè)屬性撩穿,主要作用于vue中的計(jì)算屬性(computed)類似,用來存放一些經(jīng)過修改的數(shù)值

 getters:{
      getNum:function(state){
         return state.num>0? state.num:0
      } 
  }

在調(diào)用getters中的內(nèi)容是使用$store.getters.函數(shù)名進(jìn)行調(diào)用

computed:{
    getParentNum:function(){
      return this.$store.getters.getNum   //getNum是getter里面定義方法
    }
  }
總結(jié):在工程化項(xiàng)目中谒撼,vuex所有內(nèi)容建議和routers一樣食寡,在src中建立一個(gè)state文件夾>index.js,將vuex內(nèi)容寫在index.js中廓潜,再導(dǎo)出到main.js中抵皱。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市辩蛋,隨后出現(xiàn)的幾起案子呻畸,更是在濱河造成了極大的恐慌,老刑警劉巖悼院,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伤为,死亡現(xiàn)場離奇詭異,居然都是意外死亡据途,警方通過查閱死者的電腦和手機(jī)绞愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颖医,“玉大人位衩,你說我怎么就攤上這事∪巯簦” “怎么了糖驴?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵僚祷,是天一觀的道長。 經(jīng)常有香客問我贮缕,道長久妆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任跷睦,我火速辦了婚禮筷弦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抑诸。我一直安慰自己烂琴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布蜕乡。 她就那樣靜靜地躺著奸绷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪层玲。 梳的紋絲不亂的頭發(fā)上号醉,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音辛块,去河邊找鬼畔派。 笑死,一個(gè)胖子當(dāng)著我的面吹牛润绵,可吹牛的內(nèi)容都是我干的线椰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尘盼,長吁一口氣:“原來是場噩夢啊……” “哼憨愉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卿捎,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤配紫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后午阵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺孝,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年趟庄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了括细。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚啥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锉试,到底是詐尸還是另有隱情猫十,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站拖云,受9級(jí)特大地震影響贷笛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宙项,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一乏苦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尤筐,春花似錦汇荐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至油昂,卻和暖如春革娄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冕碟。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工拦惋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人安寺。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓架忌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親我衬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叹放,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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