vue复习+vuex

news2024/11/17 5:37:44

一、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: {

属性名:初始化值

}

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

    },
})

(2)mutations

A、作用:用来修改state

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

C、只能包含同步代码

D、定义方式:

const mutations = {

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

//更改state的属性值

},

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

//更改state的属性值

}

}

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

E、触发方式:

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

actions:{
         addCountAsyn(context){ //2秒后让count加1
            setTimeout(()=>{
                context.commit("addCount",{num:1})
            },2000)
         },
        subCountAsyn(context){
             setTimeout(()=>{ //2秒后让count减1
                 context.commit("subCount",{num:1})
             },2000)
        }
    },

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

methods:{
    //同步加一
    handlerAdd(){//用来触发mutations中的addCount方法
    this.$store.commit("addCount",{num:1})
    },
    //同步减一
    handlerSub(){ //触发mutations中的subCount方法
      this.$store.commit("subCount",{num:1})
    },
}

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

A、可以包含异步代码

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

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

 //异步加一
    handlerAddAsyn(){ //触发actions中的addCountAsyn方法
      this.$store.dispatch("addCountAsyn")
    },
    //异步减一
    handlerSubAsyn(){//触发actions中的subCountAsyn方法
      this.$store.dispatch("subCountAsyn")
    }

D、定义方式:

const actions = {

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

commit(‘mutations中的方法名’)

}

}

actions:{
         addCountAsyn(context){ //2秒后让count加1
            setTimeout(()=>{
                context.commit("addCount",{num:1})
            },2000)
         },
        subCountAsyn(context){
             setTimeout(()=>{ //2秒后让count减1
                 context.commit("subCount",{num:1})
             },2000)
        }
    },

/*
    * 1.actions的作用:异步的方式来触发mutations,间接的实现对state的修改
    * 2.定义方法:在异步方法中带有一个参数context,该参数的作用是调用commit来触发mutations
    * */

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

A、定义方法:

const getters= {

方法名([参数]){

return state.属性名

}

}

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

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

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

(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

import Vue from 'vue'
import Vuex from 'vuex'

//全局注册vuex
Vue.use(Vuex)

//定义全局的store:即定义全局的状态管理器(数据仓库)
export default  new Vuex.Store({
    state:{}, //定义状态属性并初始化
    getters: {},//定义获取状态属性值的方法
    mutations: {},//定义修改状态属性值的方法
    actions: {},//定义异步修改状态属性值的方法
    modules: {} //整合子store
})

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

import Vue from 'vue'
import App from './App.vue'
import store from './store/store' //导入vuex的配置文件

//在vue实例中引用
new Vue({
  store,
  render: function (h) { return h(App) },
}).$mount('#app')
    • 示例:通过vuex实现一个计数器(实现异步、同步的数据改变)

store.js文件

//1.导入vue
import Vue from "vue";
//2.导入vuex
import  vuex from "vuex"

//3.全局注册
Vue.use(vuex)

//4.定义全局的store ,即定义全局的状态管理器(数据仓库)

//第一种方式↓
// const stata={}
// const actions={}
// const getters={}
// const modules={}
// const mutations={}
// export default new  vuex.Store({
//     state,
//     actions,
//     getters,
//     modules,
//     mutations,
// })


//第二种方式↓
export  default  new vuex.Store({
    state:{
      //1.定义状态属性,并进行初始化,在组建中可以通过this.$store.state.属性名,直接获取属性值
      count:0,
      age:0,

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

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

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

    },
})
//5.在main.js中进行配置

main.js配置

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

<template>
<div>
  <h2>通过getters来获取store(vuex)中的Age属性{{getAge}}</h2>
  <p>Count:{{count}}</p>
  <button @click="handlerAdd()">同步加一</button>
  <button @click="handlerSub()">同步减一</button>
  <button @click="handlerAddAsyn()">异步加一</button>
  <button @click="handlerSubAsyn()">异步减一</button>
</div>
</template>

<script>
export default {
  name: "home",
  computed:{
  count(){
    return this.$store.state.count //直接获取state的count属性值
  },
  getAge(){
    return this.$store.getters.getAge//通过getters的getAge方法来获取state的age属性值
  }
  },
  methods:{
    //同步加一
    handlerAdd(){//用来触发mutations中的addCount方法
    this.$store.commit("addCount",{num:1})
    },
    //同步减一
    handlerSub(){ //触发mutations中的subCount方法
      this.$store.commit("subCount",{num:1})
    },
    //异步加一
    handlerAddAsyn(){ //触发actions中的addCountAsyn方法
      this.$store.dispatch("addCountAsyn")
    },
    //异步减一
    handlerSubAsyn(){//触发actions中的subCountAsyn方法
      this.$store.dispatch("subCountAsyn")
    }

  }
}
</script>

<style scoped>

</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,刷新组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux基本功系列之sudo命令实战一

文章目录一.sudo命令介绍二. 语法格式及常用选项三. sudo配置文件详解3.1 sudo的配置文件3.2 配置文件注释3.3 sudo授权规则四. sudo常用参数实战 参考案例4.1 查看当前用户有哪些被sudo服务授权的命令4.2 结束密码的有效期4.3 限制用户的权限总结前言&#x1f680;&#x1f68…

3分钟解读ISO27001信息安全管理体系

一、什么是ISO27001 ISO27001是信息安全管理体系认证&#xff0c;对应国标号GB/T22080-2016&#xff0c;企业建立ISO27001体系能有效保证企业在信息安全领域的可靠性&#xff0c;降低企业泄密风险&#xff0c;更好的保存核心数据和重要信息。 信息安全对每个企业都是非常重要的…

Spring Cloud 高频面试题25连环炮!

今天给大家分享SpringCloud高频面试题。 Spring Cloud核心知识总结 下面是一张Spring Cloud核心组件关系图&#xff1a; 从这张图中&#xff0c;其实我们是可以获取很多信息的&#xff0c;希望大家细细品尝。 话不多说&#xff0c;我们直接开始 Spring Cloud 连环炮。 连环…

【算法基础】链表与邻接表

在机试、面试中,使用链表通常不是结构体构建Node,申请新节点new操作,因为速度过慢,申请10w量级的空节点就已经超时了。因为在算法竞赛中,常常使用 一、数组模拟单链表【⭐邻接表(n个链表)⭐】 邻接表(n个链表)最主要的应用是存储图和存储树。 建表、插入、删除操作…

ThinkPad R490电脑开机之后无线重启怎么重装系统?

ThinkPad R490电脑开机之后无线重启怎么重装系统&#xff1f;有用户使用ThinkPad R490电脑正常开机的情况下&#xff0c;出现了系统自动重启的情况&#xff0c;无法正常的使用电脑了。遇到这个情况怎么去重装一个新的电脑系统&#xff0c;恢复正常使用呢&#xff1f;来看看以下…

17. datetime模块

python 标准库中的 datetime 模块提供了和日期和时间相关的类。 类功能datetime.date以年、月和日表示日历中的日期datetime.time以小时、分钟和秒表示一天中的时间datetime.datetime以年、月、日、小时、分钟和秒表示日期和时间datetime.timedelta表示一个时间段&#xff0c;…

什么蓝牙耳机便宜音质好?平价高音质蓝牙耳机推荐

随着蓝牙耳机的品类越来越多&#xff0c;人们在选择时有了更大的空间。作为蓝牙耳机选择的两大参考要素&#xff0c;性价比和音质的出现频率相对来说会比较高。那么&#xff0c;什么蓝牙耳机便宜音质好&#xff1f;下面&#xff0c;我来给大家推荐几款平价高音质的蓝牙耳机&…

初探机器学习-梯度下降法求解最优值

文章目录什么是模型如何训练模型1、拟定假设函数2、损失函数和代价函数3、关于导数和偏导数4、使用梯度下降法求解最优值5、回顾总结三、衡量一个模型的好坏模型验证1、简单交叉验证2、K 折交叉验证3、留一交叉验证过拟合什么是模型 只要是从事IT行业&#xff0c;想必都对机器…

基于Android的房屋租赁系统

需求信息&#xff1a; 房东客户端&#xff1a; 1&#xff1a;注册登录&#xff1a;使用分配的账号进行登录&#xff1b; 2&#xff1a;发布房源&#xff1a;房主可以发布自己的房源信息&#xff1b; 3&#xff1a;预约信息&#xff1a;查看租客的预约看房信息&#xff1b; 4&am…

sqllineage解析FineBI数据集导入Datahub生成血缘

需求 当前数仓架构流程图如下图所示&#xff0c;不支持端到端数据血缘&#xff0c;数据异常排查及影响分析比较被动&#xff0c;需要端到端数据血缘及元数据管理。 业务系统&#xff1a;各种制造业业务系统&#xff08;高速迭代、重构、新建中&#xff09; 数仓开发平台&…

jChartFX Plus JavaScript 7.6.7367 Crack

jChartFX Plus包括 jChartFX 的所有功能和其他画廊类型、高级商业智能功能和用于您的 Web 或移动应用程序的仪表板功能。新的 jChartFX Plus 为您提供额外的能力来开发完整的商业仪表板和商业智能应用程序 在最新的 jChartFX Plus 中&#xff0c;我们引入了象形图和象形图条控件…

仿牛客论坛项目Docker部署(ElasticSearch+Redis+Kafka+MySQL)

仿牛客论坛项目项目部署(docker)1.ElasticSearch安装本体安装ik插件2.Zookeeper3.Kafka测试是否启动成功4.MySQL启动mysql测试载入数据5.Redis6.DockerFile构建Java8项目部署成功参考项目部署(docker) 1.ElasticSearch 安装本体 mkdir -p /opt/docker/es/plugins #创建插件文…

jspssm小区车位物业管理系统

目 录 1 绪论 1 1.1 研究背景 1 1.2 小区物业管理系统的现状 1 1.3 系统实现的功能 1 1.4 小区物业管理系统的特点 2 1.5 本文的组织结构 2 1.6 系统分析 2 2 开发技术与环境配置 3 2.1 ssm框架 3 2.2 JSP技术 3 2.3 JavaScript 4 …

给Docker NodeRed 设置登陆账户

第一步&#xff1a;运行Nodered docker run -it --rm -e TZ"Asia/Shanghai" -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red 进入web页面没有显示用户头像 第二步&#xff1a;进入容器 docker exec -it mynodered /bin/bash 退到根目录 …

AI算法工程师 | 09机器学习-概率图模型(三)隐马尔可夫模型 HMM

目录机器学习 - 概率图模型 之 隐马尔可夫模型 HMM一、马尔科夫链二、HMM 的基本概念1、HMM 背景与定义2、HMM 的两个基本假设3、确定 HMM 的两个空间和三组参数三、HMM 三个基本问题 | 导图四、HMM 相关算法1、前向算法2、维特比&#xff08;Viterbi&#xff09;算法五、案例&…

小红书购物笔记是什么

小红书购物笔记是什么 新手必看&#xff5c;12个小红书隐藏功能及操作玩法❗ #小红书#自媒体#新媒体#小红书隐藏功能#小红书运营#新手做小红书#小红书隐藏玩法#自媒体运营 hello&#xff0c;大家好&#xff0c;如果你刚好刷到这篇文章&#xff0c;说明你也是想做或正在做小红…

【内网安全】——msf木马生成教程

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 一切为了她座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日emo&#xff1a; 钱真的是万能的一、msfvenom基本使用 1、–p (- -pay…

【目标检测论文解读复现NO.28】基于改进YOLO v5的电厂管道油液泄漏检测

前言此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c;…

C++工程实践必备技能

文章目录单元测试框架如何引入如何使用测试相关SUBCASETEST_SUITETEST_CASE_FIXTURETEST_CASE_TEMPLATE断言相关常用断言宏常用工具函数benchmark框架如何引入如何使用防止被优化优化不稳定比较测试结果计算BigO输出结果到其他格式CLion中查看测试覆盖率CLion中使用sanitizers检…

【Graph】NetworkX官方基础教程:图的生成与相关操作

NetworkX官方基础教程&#xff1a;图的生成与相关操作1. Graph生成和graph操作2. 分析图3. 画图参考资料本文作为对图结构和复杂网络的快速上手&#xff0c;内容包括基于NetworkX进行图的生成与相关操作&#xff0c;Graph的分析以及绘制Graphs。 NetworkX官方基础教程 1. Grap…