vuex应用实例-this.$store.commit()触发
新建文件夹store,store下:
action.js
const actions = {} export default actions;
getter.js
const getters = {} export default getters;
mutation-types.js
export const publicSetEvent = 'publicSetEvent';
mutations.js
import {publicSetEvent} from './mutation-types'; const mutations = { [publicSetEvent]: (state, json) => {
// 初始化默认,避免跳转路由时的公用部分显示的相互影响
state.publicSet = {headTitle: true,headNav: false,sTitle: '头部标题'}
// 是否显示头部title state.publicSet.headTitle = json.headTitle || state.publicSet.headTitle; // 是否显示头部tabbar切换 state.publicSet.headNav = json.headNav || state.publicSet.headNav; // 头部显示的标题文字 state.publicSet.sTitle = json.sTitle || state.publicSet.sTitle; // tabbar的标题文字及待办badge数字 state.publicSet.navList = json.navList || state.publicSet.navList; } } export default mutations;
index.js
import Vue from 'vue' import Vuex from 'vuex' import mutations from './mutations'; import getters from './getters'; import actions from './actions'; Vue.use(Vuex); const state = { publicSet: {//设置公共头 headTitle: true, headNav: false, sTitle: '头部标题' } } const store = new Vuex.Store({ state, getters, mutations, actions }); export default store;
头部公共组件components文件夹下
v-header.vue
<template> <div class="v-header"> <vTitle v-if="publicSet.headTitle" :stitle="publicSet.sTitle"></vTitle> </div> </template> <script> import vTitle from './v-title'; import {mapState} from 'vuex'; export default{ name:'v-header', components:{vTitle}, data(){ return{ } }, computed: { ...mapState(['publicSet']) } } </script>
v-title.vue
<template> <div class="v-title"> <XHeader :left-options="{backText:''}" :title="stitle"></XHeader> </div> </template> <script> import { XHeader } from 'vux' export default{ name:'v-title', props:['stitle'], components:{XHeader}, data (){ return { } }, methods: { } } </script> <style lang="less"> </style>
App.vue
<template> <div id="app"> <vHeader></vHeader> <router-view/> </div> </template> <script> import vHeader from '@/components/header/v-header' export default { name: 'app', components:{vHeader} } </script>
main.js
import Vue from 'vue' import App from './App' import router from './router' import Vuex from 'vuex' import store from './store' Vue.use(Vuex) Vue.config.productionTip = false new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' })
页面调用index.vue
<template> <div class="index"> </div> </template> <script> export default{ name:'index', data(){ return{ } }, created(){ }, beforeRouteEnter(to,from,next){ let option={ headTitle:true,
sTitle:'我是新标题' } console.log(option); next(vm=>{ vm.$store.commit('publicSetEvent',option); }) }, methods:{ } } </script> <style lang="less"> </style>
运行进去index页面就可以看到公共头了
分类:
Vue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误