首页 > 其他分享 >【2022-11-01】前端Vue框架(六)

【2022-11-01】前端Vue框架(六)

时间:2022-11-01 21:12:07浏览次数:62  
标签:11 01 mutations state Vue 路由 组件 router store

一、Vuex的使用

Vuex基本使用

# 在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。


# 使用步骤:
    1 在state中定义变量
    2 在组件中通过this.$store.dispatch('actions中定义的函数'),触发actions中得函数执行
    3 在actions中得函数中,调用 context.commit('mutations中定义的函数')
    4 在mutations中定义的函数实现真正的修改state中得数据
    5 页面中只要使用$store.state.变量,变量变化,页面就变化  实现了组件间通信
    6 注意:
    	在组件中可以直接调用commit触发【mutations中定义的函数】
    	在组件中可以直接修改state中定义变量

初始化数据、配置actions、配置mutations,操作文件store.js

   //引入Vue核心库
   import Vue from 'vue'
   //引入Vuex
   import Vuex from 'vuex'
   //引用Vuex
   Vue.use(Vuex)
   
   const actions = {
       //响应组件中加的动作
   	jia(context,value){
   		// console.log('actions中的jia被调用了',miniStore,value)
   		context.commit('JIA',value)
   	},
   }
   
   const mutations = {
       //执行加
   	JIA(state,value){
   		// console.log('mutations中的JIA被调用了',state,value)
   		state.sum += value
   	}
   }
   
   //初始化数据
   const state = {
      sum:0
   }
   
   //创建并暴露store
   export default new Vuex.Store({
   	actions,
   	mutations,
   	state,
   })


组件中读取vuex中的数据:$store.state.sum

组件中修改vuex中的数据:$store.dispatch('action中的方法名',数据)$store.commit('mutations中的方法名',数据)

<template>
  <div>

    <hr>
    {{sum}}
    <button @click="handleClick">点我</button>
  </div>
</template>

<script>

export default {
  name: "App",
  data() {
    return {
      v:'xxx',
      sum:this.$store.state.sum
    };
  },
  methods:{
    handleClick(){
      // action中的方法名
      // this.$store.dispatch('jia',2)
      // console.log(this.$store.state.sum)

      //mutations中的方法名
      this.$store.commit('JIA',4)
      console.log(this.$store.state.sum)
    }
  }
};
</script>



Vuex执行流程图

二、Vue-route的使用

# 官方提供的用来实现SPA 的vue 插件:有了它以后,我们可以写很多页面组件,通过地址栏不同的路径显示不同的页面组件
# https://router.vuejs.org/zh/index.html

基本使用

# 使用步骤
	1 新建router/index.js
    	const routes = [配置路由1,配置路由2]
    2 main.js中使用:之前已经写好了
    	import router from './router'
        new Vue({
            ...
              router,
            ...
            }).$mount('#app')
        
    3 只需要写页面组件,配置路由即可
    4 在App.vue中加入
      	<router-view>

        </router-view>
    5 在浏览器访问const routes中配置的路径,就能看到对应的页面组件了

路由跳转

# 使用步骤:
	- 在html中使用
    	<router-link :to="path">去登录</router-link>
    -在js中使用
    	this.$router.push('goods')

路由跳转带参数

# 两种情况
	-带在请求地址中以 ?name=lqz&age=19
    -在地址中类似于django的分组  /goods/1/
    
 
# 情况1:请求地址中
	-<router-link to="/login/?name=lqz&age=19">去登录</router-link>
    -组件中接受:this.$route.query.取
    
# 情况2:地址中
	<router-link to="/login/lyf">去登录</router-link>
    -组件中接受:this.$route.params.取

路由嵌套

# 使用步骤:
	1 router/index.js 相应的路由中
        {
            path: '/goods',
            name: 'goods',
            component: Goods,
            children: [
                {
                    path: 'list',
                    component: GoodList
                },
                {
                    path: 'detail',
                    component: GoodDetail
                }
            ]

        },
    2 必须要在Goods组件中,写<router-view></router-view>
    3 使用router-link标签跳转
    4 只会变更Goods下router-view包裹的位置

路由守卫

# 对路由进行权限控制

# 前置路由守卫
router.beforeEach((to, from, next) => {
    console.log('前置路由守卫', to, from)

    if (to.name == 'shoppingcart') {
        let name = localStorage.getItem('name')
        if (name) {
            next()
        } else {
            alert('不好意思没有权限')
        }
    } else {
        next()
    }

})
# 后置路由守卫
router.afterEach((to,from)=>{
	console.log('后置路由守卫',to,from)
	document.title = to.name
})

标签:11,01,mutations,state,Vue,路由,组件,router,store
From: https://www.cnblogs.com/dy12138/p/16849163.html

相关文章

  • vuex的使用,vue-router的使用,路由守卫
    vuex的使用Vue-router的使用基本使用路由的跳转路由跳转携带参数路由嵌套路由守卫vuex的使用vuex是vue的一个插件,大大提升了vue的功能在Vu......
  • 【笔记11】Javascript - 原型、原型链
    【笔记11】Javascript-原型、原型链原型原型是function对象的一个属性,它定义了构造函数选出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原......
  • 洛谷-P2015 二叉苹果树
    二叉苹果树树形dp设计状态:\(dp[u][i]\),表示以结点\(u\)为根的子树,保留\(i\)条边的最大苹果数状态转移:遍历每一个子节点\(v\)保留和\(v\)相连的边:\(dp[u][i]=......
  • 01bfs 小专题
    概括:边权为0/1的图求最短路,常见于网格图的bfs。本质是特殊的dijkstra,因为边权只有0/1,不再需要优先队列维护Luogu4667注意需要维护的是格点的坐标和格子的坐标,然后边权如......
  • 11.01
    今日内容1.管理员相关功能2.总复习3.函数4.模块1.管理员相关功能1.冻结账户2.删除账户3.查看/修改指定用户各项数据(密码、购物车)2.总复习1.计算机基础阶段......
  • Vue学习-06
    一、Vuex的使用vue的插件,增强了vue的功能在vue中实现集中状态(数据)管理的一个vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适......
  • 1190. 反转每对括号间的子串
    1190.反转每对括号间的子串给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结......
  • 11.1
    1、for/in:与for/of相比,可迭代对象不同,in后面可以是任意对象。数组、字符串、集合和映射可迭代。object.keys()  object.values()  object.entries() 2,identi......
  • 11.1函数
    1、防止对象改变:Object.freeze2, ES6提供了其他写匿名函数的方式的语法糖。你可以使用箭头函数:constmyFunc=()=>{constmyVar="value";returnmyVar;}......
  • 优雅的写好Vue项目代码 — 路由拆分、Vuex模块拆分、element按需加载
    目录路由的拆分VUEX模块拆分ElementUI库按需加载的优雅写法路由的拆分项目较大路由较多时,路由拆分是一个不错的代码优化方案,按不同业务分为多个模块,结构清晰便于统一管......