Vue 基礎 - 請求發(fā)送與狀態(tài)管理

https://cn.vuejs.org/

發(fā)送 HTTP 請求

axios 是一個基于 Promise钮莲、用于瀏覽器和 Node.js Server 的HTTP客戶端:

  1. 從瀏覽器中創(chuàng)建 XMLHttpRequest
  2. 從 Node.js Server 發(fā)出 http 請求
  3. 支持 Promise API
  4. 攔截請求和響應
  5. 轉換請求和響應數(shù)據(jù)
  6. 取消請求
  7. 自動轉換JSON數(shù)據(jù)
  8. 防止CSRF/ XSRF

安裝 axios

npm install axios

導入并掛載到 Vue 原型中:

import axios from 'axios'
Vue.prototype.$http = axios;

發(fā)送 Get 請求:

getData(){
    var self = this;
    this.$http.get('https://cnodejs.org/api/v1/topics')
    .then(function (res) {
        // 此處的this指向的不是當前vue實例
        self.items = res.data.data
    })
    .catch(function (err) {
        console.log(err)
    })
}

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為例
// 獲取主題列表API:https://cnodejs.org/api/v1/topics
// 參數(shù):page頁碼,limit 每頁顯示的數(shù)量

發(fā)送 Post 請求(有兩種格式):

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

在 axios 中宴杀,Post 請求接收的參數(shù)必須是 form--data汰蓉,因此需要安裝 qs 插件

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

狀態(tài)管理

使用 vuex 可實現(xiàn)狀態(tài)管理(在各個組件之間管理外部狀態(tài)),共享數(shù)據(jù)。

安裝 vuex:

cnpm install vuex

父子組件之間數(shù)據(jù)傳遞

child.vue

<template>
    <div>
        <span>子組件</span>:{{fromParentMsg}}
        <button @click="sendMsgToParent">向父組件傳遞消息</button>
    </div>
</template>
<script>
    export default {
        name: "child",
        props: {
            fromParentMsg: {
                type: String, default: ""
            }
        },
        data: function() {
            return {toParentMsg: "子組件向父組件傳遞消息"}
        }
        methods: {
            sendMsgToParent: function () {
                this.$emit('handle', this.toParentMsg)    // 發(fā)生handle事件坡倔,向父組件發(fā)送消息
            }
        }
    }
</script>

parent.vue

<template>
    <div>
        <span>父組件</span>:{{fromChildMsg}}
        <hr>
        <child :fromParentMsg="toChildMsg" @handle="getMsgFromChild"></child>
    </div>
</template>

<script>
import child from './child'    // 在父組件中引入子組件

export default {
    name: "parent",
    data: function() {
        return {toChildMsg: "父組件向子組件傳遞消息", fromChildMsg: ""}
    },
    components: {child},
    methods: {
        getMsgFromChild: function(value) {
            this.fromChildMsg = value
        }
    }
}
</script>

多個組件之間共享數(shù)據(jù)

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

// 創(chuàng)建狀態(tài)倉庫,注意store脖含、state不能修改
var store = new Vuex.Store({
    state: {    // 存放定義的狀態(tài)
        name: ywh
    }
})

new Vue({
    el: "#app",
    router,
    store,
    components: {APP},
    template: "<App/>"
})

// 各組件直接通過 `this.$store.state.name` 拿到全局狀態(tài)

vuex 操作

vuex 狀態(tài)管理的流程:

  1. view
  2. actions
  3. mutations
  4. state
  5. view

實現(xiàn)狀態(tài)修改:

main.js

var store = new Vuex.Store({
    state: {    // 存放定義的狀態(tài)
        name: ywh
    },
    mutations: {    // 改變狀態(tài)
        reverse(state) {
            state.name.split("").reverse().join("")
        }
    },
    actions: {    // actions可以包含異步操作罪塔,mutation只能包含同步操作
        reverseAction(contenxt) {    // 傳入上下文對象
            setTimeout(function () {
                context.commit("reverse");     // 只對mutation操作,不直接修改狀態(tài)
            }, 1000)
        }
    },
    getters: {
        getName(state) {
            return state.name.length > 2 ? state.name : ""
        }
    }    // 定義getter方法养葵,使外部獲取狀態(tài)不需要通過this.$store.state.name直接訪問變量
    // this.$store.getters.getName
})

parent.vue

<button @click="reverse"></button>

// ...
methods: {
    reverse() {
        this.$store.commit('reverse')
        // this.$store.dispatch('reverse')    通過actions調(diào)用
    }
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末征堪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子关拒,更是在濱河造成了極大的恐慌佃蚜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件着绊,死亡現(xiàn)場離奇詭異谐算,居然都是意外死亡,警方通過查閱死者的電腦和手機畔柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門氯夷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人靶擦,你說我怎么就攤上這事腮考。” “怎么了玄捕?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵踩蔚,是天一觀的道長。 經(jīng)常有香客問我枚粘,道長馅闽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮福也,結果婚禮上局骤,老公的妹妹穿的比我還像新娘。我一直安慰自己暴凑,他們只是感情好峦甩,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著现喳,像睡著了一般凯傲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗦篱,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天冰单,我揣著相機與錄音,去河邊找鬼灸促。 笑死诫欠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的腿宰。 我是一名探鬼主播呕诉,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吃度!你這毒婦竟也來了甩挫?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤椿每,失蹤者是張志新(化名)和其女友劉穎伊者,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體间护,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亦渗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了汁尺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片法精。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖痴突,靈堂內(nèi)的尸體忽然破棺而出搂蜓,到底是詐尸還是另有隱情,我是刑警寧澤辽装,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布帮碰,位于F島的核電站,受9級特大地震影響拾积,放射性物質(zhì)發(fā)生泄漏殉挽。R本人自食惡果不足惜丰涉,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斯碌。 院中可真熱鬧一死,春花似錦、人聲如沸傻唾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽策吠。三九已至,卻和暖如春瘩绒,著一層夾襖步出監(jiān)牢的瞬間猴抹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工锁荔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蟀给,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓阳堕,卻偏偏與公主長得像跋理,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恬总,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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

  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設計架構和**解決方案**前普。> > 庫(lib...
    Rui_bdad閱讀 2,890評論 1 4
  • 實用框架以及工具 UI組件[#UI%E7%BB%84%E4%BB%B6] 開發(fā)框架[#%E5%BC%80%E5%8...
    youins閱讀 12,765評論 4 133
  • https://cn.vuejs.org 轉載 :OpenDigg awesome-github-vue 是由Op...
    文朝明閱讀 6,574評論 0 38
  • 又見木目【鳴人茗言】 愚者作繭縛, 慧者遠憂福壹堰, 拙者寸光目拭卿, 剛者劈山路。
    天恩_72bc閱讀 146評論 0 0
  • 我買了一盒木糖醇贱纠,好麗友峻厚,賊普通那種,扣開蓋子一上一下就會托上來一粒谆焊,我想吃檸檬味的惠桃,兩粒兒,但我瞅見里邊檸檬味的...
    cookie貓閱讀 268評論 0 0