vuex的模块化引入,动态加载模块 - 前端笔记-总结: 1.动态引入 在页面中调用 需要使用文件名 &n...

学习笔记

点滴记忆
回忆过往
首页>> web前端 >>vuex的模块化引入,动态加载模块 - 前端笔记
总结: 
        1.动态引入  在页面中调用   需要使用 文件名
        2.模块化引入,在页面中调用 需要使用 在store中 引入的名称


一,动态引入  在为了清楚明了  管理好vuex    这个演示一下  模块引入  以及使用
        动态引入是 通过store.registerModule 这个函数添加到 store 里面去(就是添加到vuex里面的模块化) ,通过 require.context() 创建 模块进行搜索  在通过函数 循环搜索的值 ,依次添加 模块
store.js      
import Vue from 'vue'
import Vuex from 'vuex'

import moa from './mod/a'
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    user''
  },
  mutations: {
    euser(statestop) {
      state.user = stop
      console.log(this.state.user)
    }
  },
  actions: {},
  modules: {}
  // modules: {
  //   moa
  // }
})

//require.context 创建一个查询模块   参数一:要搜索的目录,参数二:是否搜索子目录,参数三:一个匹配文件的正则表达式
const modulesContext = require.context('@/store/mod'true, /\.js$/)

/**
 * 创建模块函数
 * @param fileArr
 */
function createStoreModules(fileArr) {
  fileArr.keys().forEach(modules => {
    // 动态注册vuex
    // store.registerModule(参数一:注册状态名称,参数二:注册的状态内容)
    store.registerModule(
      modules.replace(/(^\.\/)|(\.js$)/g''),
      fileArr(modules).default
    )
  })
}

/**
 * 创建模块
 */
createStoreModules(modulesContext)

export default store


store 文件下级 模块module的文件   只展示一个
const state = {
  admin'user'
}

const mutations = {
  adduser(statedata) {
    state.admin = data
  }
}

const actions = {
  // 管理员登录
  login({ statecommit }, params) {
    return admin.login(params)
  },

  // 获取当前管理员信息
  async auth({ statecommit }, params) {
    const res = await admin.auth(params)
    commit('SET_USER_INFO'res.data.data)
    return res
  }
}

export default {
  namespacedtrue,
  state,
  actions,
  mutations
}


页面中使用
<template>
  <div>
    <el-form ref="form" :model="form" label-width="120px">
      <el-form-item label="账号">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="form.password"></el-input>
      </el-form-item>
      <el-button type="success" @click="login">登录按钮</el-button>
      <p>{{ adm }}</p>
      <p>1111</p>
      <button @click="() => add('我是adm')">改变adm的值</button>
    </el-form>
  </div>
</template>

<script>
import { mapStatemapMutations } from 'vuex'

export default {
  data() {
    return {
      form: {
        name'',
        password''
      }
    }
  },
  methods: {
    ...mapMutations({
      add'a/adduser'
    }),
    onSubmit() {
      console.log('submit!')
    },
    login() {
      // console.log(this.form)
      // 存储到 vuex中
      this.$store.commit('euser'this.form.name)
      this.$router.push('/home')
      window.localStorage.setItem('name''111')
    }
  },
  computed: {
    ...mapState({
      admstate => state.a.admin
    })
  }
}
</script>

<style lang="stylus" scoped></style>



二,模块引入    使用   和上面一样  展示 3个页面
store.js  内容
import Vue from 'vue'
import Vuex from 'vuex'
import moa from './mod/a' // 引入的a模块
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    user''
  },
  mutations: {
    euser(statestop) {
      state.user = stop
      console.log(this.state.user)
    }
  },
  actions: {},
  modules: {
    moa
  }
})

export default store


store下面的模块的文件
const state = {
  admin'user'
}

const mutations = {
  adduser(statedata) {
    state.admin = data
  }
}

const actions = {
  // 管理员登录
  login({ statecommit }, params) {
    return admin.login(params)
  },

  // 获取当前管理员信息
  async auth({ statecommit }, params) {
    const res = await admin.auth(params)
    commit('SET_USER_INFO'res.data.data)
    return res
  }
}

export default {
  namespacedtrue,
  state,
  actions,
  mutations
}


页面中使用

<template>
  <div>
    <el-form ref="form" :model="form" label-width="120px">
      <el-form-item label="账号">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="密码">
        <el-input v-model="form.password"></el-input>
      </el-form-item>
      <el-button type="success" @click="login">登录按钮</el-button>
      <p>{{ adm }}</p>
      <p>1111</p>
      <button @click="() => add('我是adm')">改变adm的值</button>
    </el-form>
  </div>
</template>

<script>
import { mapStatemapMutations } from 'vuex'

export default {
  data() {
    return {
      form: {
        name'',
        password''
      }
    }
  },
  methods: {
    ...mapMutations({
      add'moa/adduser'
    }),
    onSubmit() {
      console.log('submit!')
    },
    login() {
      // console.log(this.form)
      // 存储到 vuex中
      this.$store.commit('euser'this.form.name)
      this.$router.push('/home')
      window.localStorage.setItem('name''111')
    }
  },
  computed: {
    ...mapState({
      admstate => state.moa.admin
    })
  }
}
</script>

<style lang="stylus" scoped></style>













×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:前端笔记 » vuex的模块化引入,动态加载模块

网友评论(0)