项目展示

客户端使用的vue
vue客户端与服务器的登录验证.gif

功能

主要功能,三个页面,home, about, login三个页面,home可以匿名访问,about必须登录才能访问,login登录页面

新的技能点

vuex的模块化的使用
以及vue打包后页面刷新后找不到页面的解决办法

  • 服务器使用 connect-history-api-fallback 插件

    vuex的模块化展示

    文档:https://vuex.vuejs.org/zh/guide/modules.html

    示例:

    ```javascript import Vue from ‘vue’ import Vuex from ‘vuex’ import loginUser from ‘./loginUser’

Vue.use(Vuex)

export default new Vuex.Store({ modules: { loginUser, } });

  1. 模块化的loginUser
  2. ```javascript
  3. import * as axios from '../service/login.service'
  4. export default {
  5. namespaced: true,
  6. state: {
  7. data: null,
  8. isLoading: false
  9. },
  10. mutations: {
  11. setData(state, data) {
  12. state.data = data;
  13. },
  14. setLoading(state, payload) {
  15. state.isLoading = payload;
  16. },
  17. resetData(state) {
  18. state.data = null;
  19. localStorage.removeItem('token')
  20. }
  21. },
  22. actions: {
  23. async login({ commit }, {loginId, loginPwd}) {
  24. commit('setLoading', true);
  25. const res = await axios.login(loginId, loginPwd);
  26. commit('setData', res.data);
  27. commit('setLoading', false);
  28. return res.data;
  29. },
  30. loginOut({commit}) {
  31. commit('setData', null);
  32. axios.loginOUt();
  33. }
  34. },
  35. };

使用模块化的vuex

辅助函数的形式使用

  1. <template>
  2. <div>
  3. <h1>登录</h1>
  4. <button @click="handleClick">login</button>
  5. </div>
  6. </template>
  7. <script>
  8. import {mapState, mapActions } from 'vuex'
  9. export default {
  10. computed: {
  11. ...mapState('loginUser',['data'])
  12. },
  13. methods: {
  14. ...mapActions('loginUser',['login']),
  15. async handleClick() {
  16. const res = await this.login({
  17. loginId: 'z',
  18. loginPwd: '123456'
  19. })
  20. if(res) {
  21. this.$router.push('/')
  22. } else {
  23. alert('cuowu')
  24. }
  25. }
  26. },
  27. }
  28. </script>
  29. <style>
  30. </style>

通过this调用

  1. this.$store.dispatch("loginUser/loginOut");