飞道的博客

vue复习+vuex

396人阅读  评论(0)

一、vue.js的基本指令

1、Vue的作用:快速的构建前端页面(封装了html、css、js),以工程化的方式进行前端的开发
2、Vue的核心:

(1)组件化

(2)数据双向绑定

(3)插槽

3、基本指令

(1)插值表达式:{{ }}

(2)v-for:循环指令

(3)v-if:条件指令

(4)v-show:显示指令

(5)v-bind:绑定指令(给属性绑定变量)。简写为 :属性名

(6)v-model:表单控件的双向绑定

(7)v-on:事件绑定。简写为 @事件名

4、基本的流程

(1)在html页面中导入vue.js库文件

(2)在html页面中定义一个容器(如div),作为vue实例的挂载点

(3)在js中创建vue实例,通过实例的el属性与html页面中容器进行绑定

const vm = new Vue({

el:”#id或.class属性名”,

data(){ },

methods:{},

computed: {},

filter: { },

watch:{}

})

二、vue.js全家桶开发

1、vue-cli脚手架的作用:快速搭建vue项目
2、vue-router:vue的路由

(1)导航式路由:< router-link to=”url”>

(2)编程式路由:this.$router.push(‘url’)

3、axios的使用:

(1)封装了ajax:将后台数据封装在data属性中

(2)axios进行二次封装:对请求数据和响应数据进行拦截、对各种请求进行封装

4、Element-ui:ui组件库,快速的构建风格统一的页面
5、Echarts:数据可视化
6、组件间的通信:

(1)父子组件:

(2)兄弟组件:

(3)跨级组件:

三、vuex

1、什么是vuex:是vue项目的状态管理器(状态管理工具)。vue项目的状态是通过vue实例(组件)绑定的变量来体现。所以也可以说
vuex是用来管理vue项目中的各种变量(vue项目中的组件可以访问vuex中管理的变量—- 方便了组件的通信)。
2、vuex的工作方式:

(1)在全局中定义一个state:state本质是一个对象,该对象的属性就是vue组件用到的变量(所有组件共享这些变量)

(2)在vue组件中若要更新state的值,必须通过mutation来进行(只能通过mutation去改变state的状态),只能同步修改(即

mutation中的方法都是同步的)

(3)若要异步的修改state的值,需要通过action来进行(action不能直接修改state,但是它可以向mutation发起请求,由

mutation来修改state的值,可以在action中定义异步方法)

3、vuex的使用场景:

(1)不适合:小型的简单应用

(2)适合:大型的单页面应用

A、多个视图(组件)依赖同一个状态:

B、不同的视图的行为需要改变同一个状态

4、工作流程:View -> Actions -> Mutations -> State -> View
5、vuex的核心API:

(1)state:

A、必须是唯一的

B、本质是一个对象,维护的是vue的状态

const state= {

属性名:初始化值

}

或:

state: {

属性名:初始化值

}


   
  1. export default new vuex. Store({
  2. state:{
  3. //1.定义状态属性,并进行初始化,在组建中可以通过this.$store.state.属性名,直接获取属性值
  4. count: 0,
  5. age: 0,
  6. },
  7. })

(2)mutations

A、作用:用来修改state

B、定义了多个用于修改state的方法

C、只能包含同步代码

D、定义方式:

const mutations = {

方法名1(state,[data]){

//更改state的属性值

},

方法名2(state,[data]){

//更改state的属性值

}

}


   
  1. mutations:{
  2. addCount( state,obj){ //让state的count增加一个指定的值
  3. return state. count += obj. num
  4. },
  5. subCount( state,obj){ //让state的count减少一个指定的值
  6. return state. count -= obj. num
  7. }
  8. },
  9. /*
  10. *1.mutatuions作用:用来修改state里的值
  11. *2.要求:只能放同步代码
  12. *3.定义方法时,要注意的问题:方法的第一个参数默认是state,
  13. * 方法的第二个参数obj(变量),表示在调用该方法时传入的参数,参数必须是一个对象
  14. */

E、触发方式:

a、在actions中通过 commit(‘mutations的方法名’ ) 实现触发


   
  1. actions:{
  2. addCountAsyn( context){ //2秒后让count加1
  3. setTimeout( ()=>{
  4. context. commit( "addCount",{ num: 1})
  5. }, 2000)
  6. },
  7. subCountAsyn( context){
  8. setTimeout( ()=>{ //2秒后让count减1
  9. context. commit( "subCount",{ num: 1})
  10. }, 2000)
  11. }
  12. },

b、在组件中通过 this.$store.commit(‘方法名’,params) 实现触发


   
  1. methods:{
  2. //同步加一
  3. handlerAdd( ){ //用来触发mutations中的addCount方法
  4. this. $store. commit( "addCount",{ num: 1})
  5. },
  6. //同步减一
  7. handlerSub( ){ //触发mutations中的subCount方法
  8. this. $store. commit( "subCount",{ num: 1})
  9. },
  10. }

(3)actions:通过actions去触发mutations中的方法,实现对state的异步修改

A、可以包含异步代码

B、通过commit触发mutations来间接修改state

C、触发方式(如何触发actions):在组件中通过 this.$store.dispatch(‘action 名称’, data1) 进行触发


   
  1. //异步加一
  2. handlerAddAsyn( ){ //触发actions中的addCountAsyn方法
  3. this. $store. dispatch( "addCountAsyn")
  4. },
  5. //异步减一
  6. handlerSubAsyn( ){ //触发actions中的subCountAsyn方法
  7. this. $store. dispatch( "subCountAsyn")
  8. }

D、定义方式:

const actions = {

方法名({commit,state},data1){

commit(‘mutations中的方法名’)

}

}


   
  1. actions:{
  2. addCountAsyn( context){ //2秒后让count加1
  3. setTimeout( ()=>{
  4. context. commit( "addCount",{ num: 1})
  5. }, 2000)
  6. },
  7. subCountAsyn( context){
  8. setTimeout( ()=>{ //2秒后让count减1
  9. context. commit( "subCount",{ num: 1})
  10. }, 2000)
  11. }
  12. },
  13. /*
  14. * 1.actions的作用:异步的方式来触发mutations,间接的实现对state的修改
  15. * 2.定义方法:在异步方法中带有一个参数context,该参数的作用是调用commit来触发mutations
  16. * */

(4)getters:用于获取state的属性值。类似于state的计算属性

A、定义方法:

const getters= {

方法名([参数]){

return state.属性名

}

}


   
  1. getters:{
  2. getAge( state){ //可以通过这个方法获取上方state中的age值: this.$store.gettes.getAge
  3. return state. age= 100 //这里可以给值
  4. }
  5. },
  6. /*
  7. * 1.getters:类似于组件的计算属性
  8. * 2.作用:监听state中状态值的变化
  9. * 3.用法:this.$store.getters.属性名(方法名)
  10. */

B、在组件中的使用方式: this.$store.getters.方法名


   
  1. computed:{
  2. getAge( ){
  3. return this. $store. getters. getAge //通过getters的getAge方法来获取state的age属性值
  4. }
  5. },

(5)modules:在大型项目中用于管理多个子模块的state

6、应用
注意版本:vuex3对应的vue2,vuex4对应的vue3

(1)安装vuex

npm install vuex@3 或 npm i vuex@3 -S

(2)定义vuex的store(仓库)

A、 src/store/store.js

B、导入vue和vuex


   
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. //全局注册vuex
  4. Vue. use( Vuex)
  5. //定义全局的store:即定义全局的状态管理器(数据仓库)
  6. export default new Vuex. Store({
  7. state:{}, //定义状态属性并初始化
  8. getters: {}, //定义获取状态属性值的方法
  9. mutations: {}, //定义修改状态属性值的方法
  10. actions: {}, //定义异步修改状态属性值的方法
  11. modules: {} //整合子store
  12. })

(3)在main.js文件中进行配置


   
  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import store from './store/store' //导入vuex的配置文件
  4. //在vue实例中引用
  5. new Vue({
  6. store,
  7. render: function ( h) { return h( App) },
  8. }).$mount( '#app')
    • 示例:通过vuex实现一个计数器(实现异步、同步的数据改变)

store.js文件


   
  1. //1.导入vue
  2. import Vue from "vue";
  3. //2.导入vuex
  4. import vuex from "vuex"
  5. //3.全局注册
  6. Vue. use(vuex)
  7. //4.定义全局的store ,即定义全局的状态管理器(数据仓库)
  8. //第一种方式↓
  9. // const stata={}
  10. // const actions={}
  11. // const getters={}
  12. // const modules={}
  13. // const mutations={}
  14. // export default new vuex.Store({
  15. // state,
  16. // actions,
  17. // getters,
  18. // modules,
  19. // mutations,
  20. // })
  21. //第二种方式↓
  22. export default new vuex. Store({
  23. state:{
  24. //1.定义状态属性,并进行初始化,在组建中可以通过this.$store.state.属性名,直接获取属性值
  25. count: 0,
  26. age: 0,
  27. },
  28. /*
  29. *1.mutatuions作用:用来修改state里的值
  30. *2.要求:只能放同步代码
  31. *3.定义方法时,要注意的问题:方法的第一个参数默认是state,
  32. * 方法的第二个参数obj(变量),表示在调用该方法时传入的参数,参数必须是一个对象
  33. */
  34. mutations:{
  35. addCount( state,obj){ //让state的count增加一个指定的值
  36. return state. count += obj. num
  37. },
  38. subCount( state,obj){ //让state的count减少一个指定的值
  39. return state. count -= obj. num
  40. }
  41. },
  42. /*
  43. * 1.actions的作用:异步的方式来触发mutations,间接的实现对state的修改
  44. * 2.定义方法:在异步方法中带有一个参数context,该参数的作用是调用commit来触发mutations
  45. * */
  46. actions:{
  47. addCountAsyn( context){ //2秒后让count加1
  48. setTimeout( ()=>{
  49. context. commit( "addCount",{ num: 1})
  50. }, 2000)
  51. },
  52. subCountAsyn( context){
  53. setTimeout( ()=>{ //2秒后让count减1
  54. context. commit( "subCount",{ num: 1})
  55. }, 2000)
  56. }
  57. },
  58. /*
  59. * 1.getters:类似于组件的计算属性
  60. * 2.作用:监听state中状态值的变化
  61. * 3.用法:this.$store.getters.属性名(方法名)
  62. */
  63. getters:{
  64. getAge( state){ //可以通过这个方法获取上方state中的age值: this.$store.gettes.getAge
  65. return state. age= 100 //这里可以给值
  66. }
  67. },
  68. modules:{
  69. },
  70. })
  71. //5.在main.js中进行配置

main.js配置

组件home(记得在app.vue中渲染)


   
  1. <template>
  2. <div>
  3. <h2>通过getters来获取store(vuex)中的Age属性{{getAge}} </h2>
  4. <p>Count:{{count}} </p>
  5. <button @click="handlerAdd()">同步加一 </button>
  6. <button @click="handlerSub()">同步减一 </button>
  7. <button @click="handlerAddAsyn()">异步加一 </button>
  8. <button @click="handlerSubAsyn()">异步减一 </button>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. name: "home",
  14. computed:{
  15. count( ){
  16. return this. $store. state. count //直接获取state的count属性值
  17. },
  18. getAge( ){
  19. return this. $store. getters. getAge //通过getters的getAge方法来获取state的age属性值
  20. }
  21. },
  22. methods:{
  23. //同步加一
  24. handlerAdd( ){ //用来触发mutations中的addCount方法
  25. this. $store. commit( "addCount",{ num: 1})
  26. },
  27. //同步减一
  28. handlerSub( ){ //触发mutations中的subCount方法
  29. this. $store. commit( "subCount",{ num: 1})
  30. },
  31. //异步加一
  32. handlerAddAsyn( ){ //触发actions中的addCountAsyn方法
  33. this. $store. dispatch( "addCountAsyn")
  34. },
  35. //异步减一
  36. handlerSubAsyn( ){ //触发actions中的subCountAsyn方法
  37. this. $store. dispatch( "subCountAsyn")
  38. }
  39. }
  40. }
  41. </script>
  42. <style scoped>
  43. </style>

实现效果↓

8、 强调:
A、在组件中触发mutations中定义的方法:触发同步方法

this.$store.commit(‘mutations中定义的方法名’,参数)

B、在组件中触发actions中定义的方法:触发异步方法

this.$store.dispatch(‘actions中定义的方法名’)

C、获取state中属性值的方法:

(a)直接获取:this.$store.state.属性名

(b)通过getters: this.$store.getters.属性名

D、在定义vuex的Store实例时不能使用this
9、vuex的工作流程

(1)在组件中通过commit直接向mutations提交修改state的请求、或者通过dispatch向actions派发请求

(2)mutations通过接收到的请求去修改state的状态

(3)当state的状态发生改变后,组件通过计算属性(computed)获取改变后state,刷新组件


转载:https://blog.csdn.net/m0_74331185/article/details/128807692
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场