美文网首页
Vue 基础 - 请求发送与状态管理

Vue 基础 - 请求发送与状态管理

作者: 千反田爱瑠爱好者 | 来源:发表于2018-08-26 17:37 被阅读16次
https://cn.vuejs.org/

发送HTTP请求

axios是一个基于Promise、用于浏览器和Node.js Server的HTTP客户端:

  1. 从浏览器中创建XMLHttpRequest
  2. 从Node.js Server发出 http 请求
  3. 支持 Promise API
  4. 拦截请求和响应
  5. 转换请求和响应数据
  6. 取消请求
  7. 自动转换JSON数据
  8. 防止CSRF/ XSRF

安装axios

npm install axios

导入并挂载到Vue原型中:

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

发送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社区官方的API为例
// 获取主题列表API:https://cnodejs.org/api/v1/topics
// 参数:page页码,limit 每页显示的数量

发送Post请求(有两种格式):

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

在axios中,post请求接收的参数必须是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)
    })
}

状态管理

使用Vuex可实现状态管理(在各个组件之间管理外部状态),共享数据。

安装vuex:

cnpm install vuex

父子组件之间数据传递

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)    // 发生handle事件,向父组件发送消息
            }
        }
    }
</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>

多个组件之间共享数据

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

// 创建状态仓库,注意store、state不能修改
var store = new Vuex.Store({
    state: {    // 存放定义的状态
        name: ywh
    }
})

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

// 各组件直接通过this.$store.state.name拿到全局状态

vuex操作

vuex状态管理的流程:

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

实现状态修改:

main.js

var store = new Vuex.Store({
    state: {    // 存放定义的状态
        name: ywh
    },
    mutations: {    // 改变状态
        reverse(state) {
            state.name.split("").reverse().join("")
        }
    },
    actions: {    // actions可以包含异步操作,mutation只能包含同步操作
        reverseAction(contenxt) {    // 传入上下文对象
            setTimeout(function () {
                context.commit("reverse");     // 只对mutation操作,不直接修改状态
            }, 1000)
        }
    },
    getters: {
        getName(state) {
            return state.name.length > 2 ? state.name : ""
        }
    }    // 定义getter方法,使外部获取状态不需要通过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调用
    }
}

相关文章

  • Vue 基础 - 请求发送与状态管理

    发送HTTP请求 axios是一个基于Promise、用于浏览器和Node.js Server的HTTP客户端: ...

  • vue基础

    vue全家桶 vue-cli 框架 vue vuex 状态管理 vue-router 路由 axios 请求...

  • Vue: 插件

    说到 Vue 的插件,大家会先想到什么呢,是那个状态管理的 Vuex 还是发 Ajax 请求的 axios 呢?今...

  • VUE100问

    vue-cli工程 vue.js核心知识 vue-router路由 vuex状态管理器 axios等http请求 ...

  • vue常用的插件等安装

    Vuex:状态管理 vue-router:路由 axios:请求数据 mock:模拟后台数据 less和sass ...

  • Vue工具

    工具 ==同一类别,排名有先后==基础:Vue状态管理:vuex;路由:vue-router,Page.js,Di...

  • 【重读iOS】网络请求1:基础知识

    基础知识 HTTP基础知识(状态码,请求方法,请求头,cookies) socket/webSocket 系统请求...

  • 【重读iOS】网络请求2:应用

    基础知识 HTTP基础知识(状态码,请求方法,请求头,cookies) socket/webSocket 系统请求...

  • Vuex

    是什么? Vuex 是专门为Vue提供的状态管理工具 状态即数据 状态管理就是管理 Vue组件中的数据 内部机制:...

  • Angular5中状态管理

    前面学习了vue,react 都有状态管理,如vue中的vuex是全局状态管理,在任何组件里都可以引用状态管理中的...

网友评论

      本文标题:Vue 基础 - 请求发送与状态管理

      本文链接:https://www.haomeiwen.com/subject/yoioiftx.html