一、Vuex简介

vuex是一个专门为Vue.js设计的集中式状态管理架构。我们把它理解为在data中需要共享给其他组件使用的部分。
Vuex和单纯的全局对象有以下不同:
  • 1、Vuex 的状态存储是响应式的。当vue组件从store中读取状态的时候,
      若store中的状态发生变化,那么相应的组件也会相应的得到高效更新。
  • 2、你不能直接改变store中的状态。改变store中的状态的唯一途径就是显示的
      提交(commit)mutation。这样使得我们可以方便的跟踪每一个状态的变化,
      从而让我们能够实现一些工具来帮助我们更好的了解我们的应用。

二、安装使用vuex

安装: -- npm install vuex

方式一:

// main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import vuex from 'vuex'Vue.use(vuex)Vue.config.productionTip = falseconst store = new vuex.Store({state: {show: false,}
});new Vue({el: '#app',router,store,components: { App },template: '<App/>'
});

方式二:

- 为了方便维护,我们通常把在src下面新建一个store文件夹,然后在里面新建一个index.js

import Vue from 'vue'
import Vue_x from "vuex"Vue.use(Vue_x);export default  new Vue_x.Store({state: {show: false,},
});

- 那么main.js要改成

import Vue from 'vue'
import App from './App'
import router from './router'
import store from "./store"Vue.config.productionTip = false;new Vue({el: '#app',router,store,components: { App },template: '<App/>'
});

三、vuex的三种方法

- State

简而言之~~state是保存我们data中需要共享的数据。
由于Vuex的存储是响应式的,从store实例中读取状态的最简单的方式就是在计算属性中返回某个状态。
this.$store.state.count

// 创建一个组件
const Counter = {template: `<div>{{ count }}</div>`,computed: {count(){return this.$store.state.count}}
};

- Getter

有时候我们需要从store中的state中派生出一些状态,例如对数据进行简单的计算。
并且很多组件都需要用到此方法,我们要么复制这个函数,要么抽取到一个公共函数,多处导入。我们vuex提供了更加方便的方法,getter ,它就像计算属性一样,getter的返回值会根据它的依赖被缓存起来,只有它的依赖发生改变时,才会重新计算。
Getter会接收state作为其第一个参数:

Getter的使用:

import Vue from 'vue'
import Vue_x from "vuex"Vue.use(Vue_x);export default  new Vue_x.Store({state: {count: 20,},// 通过 this.$store.getters.my_funcgetters: {my_func: function (state) {return state.count * 2}},
});

Getters也能接收getters作为第二个参数:

import Vue from 'vue'
import Vue_x from "vuex"Vue.use(Vue_x);export default  new Vue_x.Store({state: {count: 20,},// 通过 this.$store.getters.my_funcgetters: {my_func: function (state) {return state.count * 2},// 通过 this.$store.getters.my_func_countmy_func_count: function (state, getters) {return getters.my_func.length}},
});

- Mutation

更改Vuex中的store中的状态的唯一方法是提交mutation。
每个mutation都有一个字符串的事件类型(type),和一个回调函数handler。
也就是说我们要触发mutation中定义的方法(type),然后才会执行这个方法(handler)。
这个方法就是我们更改状态的地方,它会接收state为第一个参数,后面接收其他参数:

mutation 的基本使用:
mutation中的事件需要通过 this.$store.commit('increment', 10)这个方式来提交触发事件

import Vue from 'vue'
import Vue_x from "vuex"Vue.use(Vue_x);export default  new Vue_x.Store({state: {count: 20,},// 需要通过 this.$store.commit('increment', 10)mutations: {increment (state, n) {// 变更状态state.count += n}}
});

Mutation需要遵守Vue的响应规则:
既然vuex中的store中的状态是响应式的,那么当我们状态变更时,监视状态的vue组件也会更新。这就意味着vuex中的mutation也需要与使用vue一样遵守一些注意事项:
  -- 1,最好提前在你的store中初始化好所有的所需要的属性
  -- 2,当对象需要添加属性时,你应该使用
      -- Vue.set(obj, 'newProp', 123)
      -- 以新对象代替老对象 state.obj = { ...state.obj, newProp: 123}

四、axios的简单使用

基于Promise的HTTP请求客户端,可以同时在浏览器和node.js使用

  • 安装axios:
    -- npm install axios -D
  • 基本配置:
// main.js
import axios from "axios"Vue.prototype.$axios = axios// 组件中
methods: {init () {this.$axios({method: "请求方式",url: "后端的url"})},
};
  • 基本使用:
  1. get请求
test(){this.$axios.get(this.$store.state.apiList.course,{params: {id: 123,}}).then(function (response) {// 请求成功回调函数}).catch(function (response) {// 请求失败的回调函数})
}
  1. post请求:
test(){this.$axios.post(this.$store.state.apiList.course,{course_title: "Python",course_price: "19.88"}).then(function (response) {// 请求成功回调函数}).catch(function (response) {// 请求失败的回调函数})
}
  1. 发送多个并发请求:
function getCourse(){return this.$axios.get('/course/12')}
function getCourse_all() {return this.$axios.get('/course')}
this.$axios.all([getCourse_all(),getCourse()]).then().catch()
  1. axios.request方式:
methods: {init(){var that = thisthis.$axios.request({url: that.$store.state.apiList.course,method: 'get'}).then(function (data) {if (data.status === 200){that.courseList = data.data}}).catch(function (reason) {console.log(reason)})}
},

五、简单实例:

  • vue组件代码:
<template><div><h1>这是轻课</h1><el-table :data="tableData2" :border="true" :row-class-name="tableRowClassName"><el-table-column prop="date" label="日期" width="100"></el-table-column><el-table-column prop="name" label="姓名" width="100"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table></div>
</template><script>export default {name: "qingke",//element的事件方法methods: {tableRowClassName({row, rowIndex}) {if (rowIndex === 1) {return 'warning-row';} else if (rowIndex === 3) {return 'success-row';}return '';}},//定义的数据data() {return {tableData2: "",}},//生命周期函数,加载完页面就执行里面的方法mounted() {let that = this;this.$axios.request({url: "http://127.0.0.1:8000/index/",method: "get"}).then(function (data) {console.log(data)that.tableData2 = data.data}).catch(function (data) {console.log(222)})}}
</script>
//样式省略
</style>
  • 基于Django实现的后端:
  1. urls:
from django.conf.urls import url
from django.contrib import admin
from app01 import viewsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^index/', views.index),
]
  1. views.py
from django.shortcuts import render
from django.http import JsonResponsedef index(request):tableData2 = [{'date': '2016-05-02','name': '王计飞','address': '上海市普陀区金沙江路 1518 弄',}, {'date': '2016-05-04','name': '刘德凯','address': '上海市普陀区金沙江路 1518 弄'}, {'date': '2016-05-01','name': '杜彪','address': '上海市普陀区金沙江路 1518 弄',}, {'date': '2016-05-03','name': '左帮政','address': '上海市普陀区金沙江路 1518 弄'},{'date': '2016-05-03','name': '李永辉','address': '上海市普陀区金沙江路 1513 弄'}]return JsonResponse(tableData2, safe=False)
  1. 解决跨域问题的middlemares
    middlewares.py:需要django注册
from django.utils.deprecation import MiddlewareMixinclass my_middleware(MiddlewareMixin):def process_response(self, request, response):response["Access-Control-Allow-Origin"] = "*"if request.method == "OPTIONS":response["Access-Control-Allow-Headers"] = "Content-Type"response["Access-Control-Allow-Methods"] = "POST, DELETE, PUT"return response
  1. 前端数据渲染得到视图

    image.png

后端按照前端数据的格式要求返回数据,前端拿到数据后驱动生成视图,所以Vue的开发前后端只需要沟通好接口就行,从而大大提高了开发的效率。

VueX 以及axios相关推荐

  1. 基于Vue+Vue-Router+Vuex+Element-ui+axios,高仿小米商城,实现的电商项目

    介绍: 项目简介 本项目前后端分离,前端基于Vue+Vue-router+Vuex+Element-ui+Axios,参考小米商城实现.后端基于Node.js(Koa框架)+Mysql实现. 前端包含 ...

  2. 使用vuex和axios获取api数据

    使用vuex,我们可以轻松管理状态.因为如果您的组件需要共享和更新状态,那么就需要它.在本篇文章中,我将为您提供完整的vuex设置,其中包括带有axios调用api获取数据的示例. 因此,让我们开始我 ...

  3. vue vue-router vuex element-ui axios 的学习笔记(七)完善登录注册

    现在我们已经能够在服务器环境下完成注册操作了 登录功能 login.vue <template><el-main><el-form :model="LoginF ...

  4. Vuex、axios以及跨域请求处理

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同:1. V ...

  5. 记一次vue+vuex+vue-router+axios+elementUI开发(二)

    开发环境跟脚手架初始完毕后,我们开始配置axios请求后台接口   axios使用说明:https://www.kancloud.cn/yunye/axios/234845 1.本人是在脚手架中的sr ...

  6. vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(十一)构思商品页面...

    在写商品页面product.vue之前,我应该思考一下,商品页面要实现那些功能,该不如布局? 要实现的功能 1.所有商品列表的展示 2.分类商品的列表展示 3.搜索商品或得列表展示 4.单一商品的详细 ...

  7. element ui登录界面_vue vue-router vuex element-ui axios 写一个代理平台的学习笔记(四)美化头部和登录界面...

    美化头部header.vue 找张头像当用户头像 在写点css来美化一下头部,完善一下现在能完成的功能 header.vue :default-active="$route.path&quo ...

  8. Vue的完整学习笔记(介绍,基础语法,组件开发与通信,模块化概念,webpack,vue-cli,vue-router,vuex,axios)

    前端发展和架构 先聊一下前端开发模式的发展. 静态页面 最初的网页以HTML为主,是纯静态的网页.网页是只读的,信息流只能从服务端到客户端单向流通.开发人员也只关心页面的样式和内容即可. 异步刷新,操 ...

  9. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

最新文章

  1. python添加时间戳_Python 给某个文件名添加时间戳的方法
  2. 卸载mysql 安装_MySQL萌新第一季 第二话
  3. linux存储pdf伟岸_Linux 文件恢复的原理
  4. 数列分段(洛谷P1181题题解,Java语言描述)
  5. python123.io在线编程,详解Python IO编程
  6. ABAP Debug 调试功能
  7. cad批量打印快捷键_批量打印CAD图(无删减版)
  8. macOS上使用aircrack-ng暴力破解Wi-Fi密码
  9. 三极管输出和输入特性曲线人类语言(共射为例)
  10. 用Keil uVision5创建纯汇编语言的STM32工程
  11. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?(递归与动态规划)
  12. Openlayers之地图比例尺控件
  13. accept文件上传类型
  14. 书籍笔记-《SQL必会知识》
  15. 安全尽职是企业的阿克琉斯之踵
  16. windows 趣味实用脚本
  17. linux常见的解压命令,linux常见解压命令
  18. TCP中的粘包、拆包问题产生原因及解决方法
  19. Intel NUC冥王峡谷
  20. STM32F407野火霸天虎系列笔记(四)EXTI

热门文章

  1. 清华大学计算机杨弋,[转载]专注与兴趣是成功的阶梯(访杨弋)
  2. Python 小白学习之:linux 基础和 python 入门
  3. 练习题 斐波那契数列
  4. 如何快速有效的复习教师资格证?
  5. 蜜瓜文案:水果蜜瓜文案短句,水果店蜜瓜发朋友圈文案
  6. APP微信支付报错《商户号该产品权限未开通,请前往商户平台产品中心检查后重试》
  7. Matlab开发Web App服务器
  8. 初识Hadoop(会飞的大象)
  9. matlab获取地图边界,科学网—提取百度地图县域的矢量边界 - 张乐乐的博文
  10. 检测报告上CNAS、CMA资质含义及联系