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

vue--router路由基本加載

可以分為四步 :具體流程如下 :

  • 安裝
    在命令行中 進(jìn)入到自己的項(xiàng)目目錄輸入一下命令 安裝依賴:
npm install --save vue-router  
  • 在需要用到路由跳轉(zhuǎn)的模塊中引用(本文是在在入口文件main.js 進(jìn)行設(shè)置)
import router from 'vue-router'
Vue.use(router)

  • 配置路由文件绳军,并在vue實(shí)例中注入
// 配置路由
var rt = new router({
    routes: [
        // 可以定義多個(gè)路由
        {
            path: '/hello', //指定要跳轉(zhuǎn)的路徑
            component: HelloWorld //指定要跳轉(zhuǎn)的組件
        }
    ]
})

/* eslint-disable no-new */
new Vue({
    el: '#app',
    // 注入到實(shí)例
    router: rt,
    components: { App },
    template: '<App/>'
})
  • 確定視圖加載的位置
 <router-view></router-view>
image.png

具體代碼:


GIFx.gif

vue--router路由的跳轉(zhuǎn)

首先在路由模塊router中定義路由


定義要跳轉(zhuǎn)的組件:
image.png

開(kāi)始跳轉(zhuǎn)
image.png

效果動(dòng)圖:
GIF動(dòng)圖.gif

vue-router路由參數(shù)的傳遞

第一步

  • 一.必須在路由內(nèi)加入路由的name
  • 二.必須在path后加/: +傳遞的參數(shù)
// 不論在那個(gè)模塊中使用 必須首先引入
import Vue from 'vue'
import router from 'vue-router'
import HelloWorld from '../components/HelloWorld'
import HelloEarth from '../components/HelloEarth'
// 使用
Vue.use(router)

// 配置路由 ----- export default   一個(gè)模塊像被其他模塊引用 首先要導(dǎo)出

export default new router({
    routes: [
        // 可以定義多個(gè)路由
        { 
//定義name
            name: 'helloworld',
            path: '/helloworld/:worldmsg', //指定要跳轉(zhuǎn)的路徑 /: 后面是要傳遞的參數(shù)
            component: HelloWorld //指定要跳轉(zhuǎn)的組件
        }, {
//定義name
            name: 'helloearth',
            path: '/helloearth/:earthmsg', //指定要跳轉(zhuǎn)的路徑 /: 后面是要傳遞的參數(shù)
            component: HelloEarth //指定要跳轉(zhuǎn)的組件
        },

    ]
})
第二步 在:to后面設(shè)置 需要傳遞的參數(shù)
<template>
    <ul>
        <li>
            <!-- 在:to后面設(shè)置 需要傳遞的參數(shù) -->
            <router-link :to="{name:'helloworld',params:{worldmsg:'你好時(shí)節(jié)'}}">Hello World</router-link>
        </li>
        <li>
             <router-link :to="{name:'helloearth',params:{earthmsg:'你好地丟'}}">Hello Earth</router-link>
        </li>
    </ul>
</template>
<script>
export default {
    name : "list"
}
</script>
<style lang="">
    
</style>
第三步渲染到頁(yè)面上

固定格式為:
讀取參數(shù): $route.params.XXX

 <h3>{{$route.params.worldmsg}}</h3>
  <h3>{{$route.params.earthmsg}}</h3>

Axios之get請(qǐng)求詳解

可以分為幾步:具體如下

  • 安裝
npm install axios
  • 在項(xiàng)目中引入加載
import axios from 'axios'
  • 將axios全局掛載到Vue實(shí)例上
    $http是你自己起的名字
Vue.prototype.$http = axios
  • 發(fā)送請(qǐng)求 (此處以cnode社區(qū)api為例)
    使用CNODE社區(qū)官方的API為例展開(kāi)學(xué)習(xí)
    獲取主題列表API:https://cnodejs.org/api/v1/topics
    參數(shù):page頁(yè)碼
    limit 每頁(yè)顯示的數(shù)量
//使用傳統(tǒng)的function
<template>
  <div class="hello">
   <H3>我是axios  用來(lái)發(fā)送請(qǐng)求 和 攔截響應(yīng)</H3>
   <button @click="getData">發(fā)送請(qǐng)求</button>
   <ul>
     <li v-for="(item,index) in  items" :key="index">
       {{item.title}}
     </li>
   </ul>
  </div>
</template>

<script>
// 下面用到了Vue 首先要引入 
import Vue from 'vue'
// 第一步 首先要安裝  npm install axios
// 第二部 引入
import axios from 'axios'
// 第三步 將axios全局掛載到VUE原型上 $.后面隨便命名 
Vue.prototype.$http = axios
export default {
  name: 'HelloWorld',
  data () {
    return {
     items : []
    }
  },
  methods: {
    // 發(fā)送請(qǐng)求 攔截響應(yīng)的過(guò)程 當(dāng)點(diǎn)擊按鈕時(shí) 請(qǐng)求 cnede社區(qū)主頁(yè)內(nèi)容 
    getData(){
      var self = this;
      // 可以設(shè)置參數(shù)  在url后面設(shè)置  也可以在鏈接上設(shè)置參數(shù)   ?page:1&limit:10
      this.$http.get('https://cnodejs.org/api/v1/topics',{
        params:{
          page:1,
          limit:10
        }
      })
      .then(function(res){
        // 注意此處的this不是當(dāng)前的Vue實(shí)例 需要在前面賦值一下 注意 后臺(tái)請(qǐng)求的數(shù)據(jù)是數(shù)組  需要遍歷一下  在進(jìn)行操作    this es6語(yǔ)法 則會(huì)直接繼承父元素 .then(res=>{this.items = res.data.data  console.log(res.data.data})
        self.items = res.data.data
            console.log(res.data.data)
      })
      .catch(function(err){
        console.log(err)
      })
    }
  },
}
</script>

可以設(shè)置參數(shù) 在url后面設(shè)置 也可以在鏈接上設(shè)置參數(shù) ?page:1&limit:10

.then(function(res){
        // 注意此處的this不是當(dāng)前的Vue實(shí)例 需要在前面賦值一下 注意 后臺(tái)請(qǐng)求的數(shù)據(jù)是數(shù)組  需要遍歷一下  在進(jìn)行操作    this es6語(yǔ)法 則會(huì)直接繼承父元素 .then(res=>{this.items = res.data.data  console.log(res.data.data})
        self.items = res.data.data
            console.log(res.data.data)
      })
      .catch(function(err){
        console.log(err)
      })

Axios之post請(qǐng)求詳解

POST傳遞數(shù)據(jù)有兩種格式:
form--data ?page=1&limit=48
x-www--form--urlencoded { page: 1,limit: 10 }
axios中叹谁,post請(qǐng)求接收的參數(shù)必須是form--data
要安裝qs插件—-qs.stringify
具體如下:
在當(dāng)前項(xiàng)目中安裝qs插件

npm install qs

在當(dāng)前項(xiàng)目模塊中引入

import qs from 'qs'
postData(){
      var self = this;
      // 可以設(shè)置參數(shù)  在url后面設(shè)置  也可以在鏈接上設(shè)置參數(shù)   ?page:1&limit:10
      this.$http.post('https://cnodejs.org/api/v1/topics',qs.stringify(
        {
          page:1,
          limit:10
        }
      ))
      .then(function(res){
        // 注意此處的this不是當(dāng)前的Vue實(shí)例 需要在前面賦值一下 注意 后臺(tái)請(qǐng)求的數(shù)據(jù)是數(shù)組  需要遍歷一下  在進(jìn)行操作    this es6語(yǔ)法 則會(huì)直接繼承父元素 .then(res=>{this.items = res.data.data  console.log(res.data.data})
        self.items = res.data.data
            console.log(res.data.data)
      })
      .catch(function(err){
        console.log(err)
      })
    },
  },

Vuex之store

用來(lái)管理狀態(tài)埂陆,共享數(shù)據(jù)煌张,在各個(gè)組件之間管理外部狀態(tài)呐赡,應(yīng)用場(chǎng)景 大型電商項(xiàng)目各個(gè)單頁(yè)面中共有的 登錄顯示狀態(tài)
如何使用?

  • 首先安裝插件:
    注意 install可以簡(jiǎn)寫(xiě)為 num i vuex
npm i vuex
  • 第二步 在入口文件min.js引入vuex骏融,并通過(guò)use方法使用它
    import Vuex from 'vuex'
    Vue.use(Vuex)
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import Vuex from 'vuex'
Vue.use(Vuex)


    // 創(chuàng)建狀態(tài)倉(cāng)庫(kù) 
var store = new Vuex.Store({
        state: {
            num: 88
        }
    })
    Vue.config.productionTip = false
    /* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    // 注入
    store,
    components: { App },
    template: '<App/>'
})

  • 第三步 創(chuàng)建狀態(tài)管理倉(cāng)庫(kù) 并在實(shí)例中注入
 // 創(chuàng)建狀態(tài)倉(cāng)庫(kù) 
var store = new Vuex.Store({
        state: {
            num: 88
        }
    })
    Vue.config.productionTip = false
    /* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    // 注入
    store,
    components: { App },
    template: '<App/>'
})
  • 第四步 通過(guò)this.$sore.state.XXX直接拿到需要的數(shù)據(jù)
    注意本例狀態(tài)管理設(shè)置為 num :88
<template>
  <div>
    我是組件outter中的全局狀態(tài){{outNum}}
  </div>
</template>
<script>
export default {
  name: 'outter',
  computed: {
    outNum: function () {
//直接通過(guò)this.$sore.state.XXX拿到全局狀態(tài) 88
      return this.$store.state.num
    }
  },
}
</script>
<style lang="">
</style>
全局狀態(tài)
Vuex的相關(guān)操作

vuex狀態(tài)管理的流程
view———->actions(可包含異步)———–>mutations(只能同步)—–>state————->view
除了能夠獲取狀態(tài)如何改變狀態(tài)呢链嘀?小栗子:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
    // 創(chuàng)建狀態(tài)倉(cāng)庫(kù) 
export default new Vuex.Store({
    state: {
        num: 88
    },
    // 改變狀態(tài) 但是mutation只能包含同步操作
    mutations: {
        // increase: function(state) {

        // } 下面是es6語(yǔ)法:
        increase(state) {
            state.num++
        },
        decrease(state) {
            state.num = state.num - 30
        }
    },
    // actions只能對(duì)mutations操作 actions可以包含異步操作,但是mutation只能包含同步操作
    actions: {
        // context 上下文對(duì)象
        decreaseAction(context) {
            // actions可以包含異步操作
            //   setTimeout(function() {
            //       context.commit('decrease')
            //   }, 1000)
            context.commit('decrease')
        }
    },
    // 處理狀態(tài)
    getters: {
        getNum(state) {
            return state.num > 0 ? state.num : 0;

        }
    }
})


調(diào)用 :
this.$store.commit(increase);
此處的increase是你在mucations中定義的方法名


注意:actions提交的是mutation,而不是直接變更狀態(tài)
actions可以包含異步操作档玻,但是mutation只能包含同步操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怀泊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子误趴,更是在濱河造成了極大的恐慌霹琼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凉当,死亡現(xiàn)場(chǎng)離奇詭異枣申,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)看杭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門忠藤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人楼雹,你說(shuō)我怎么就攤上這事模孩。” “怎么了贮缅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵榨咐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谴供,道長(zhǎng)块茁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任憔鬼,我火速辦了婚禮龟劲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轴或。我一直安慰自己昌跌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布照雁。 她就那樣靜靜地躺著蚕愤,像睡著了一般答恶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萍诱,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天悬嗓,我揣著相機(jī)與錄音,去河邊找鬼裕坊。 笑死包竹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的籍凝。 我是一名探鬼主播周瞎,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼饵蒂!你這毒婦竟也來(lái)了声诸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤退盯,失蹤者是張志新(化名)和其女友劉穎彼乌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渊迁,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慰照,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宫纬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焚挠。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漓骚,靈堂內(nèi)的尸體忽然破棺而出蝌衔,到底是詐尸還是另有隱情,我是刑警寧澤蝌蹂,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布噩斟,位于F島的核電站,受9級(jí)特大地震影響孤个,放射性物質(zhì)發(fā)生泄漏剃允。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一齐鲤、第九天 我趴在偏房一處隱蔽的房頂上張望斥废。 院中可真熱鬧,春花似錦给郊、人聲如沸牡肉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)统锤。三九已至毛俏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饲窿,已是汗流浹背煌寇。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逾雄,地道東北人阀溶。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嘲驾,于是被迫代替她去往敵國(guó)和親淌哟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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