用vue寫簡單的登錄注冊總結(jié)

步驟一

1.安裝腳手架:npm install vue-cli -g
2.wepack生成html模版:vue init webpack ' 文件名'
3.安裝axios、js-cookie、element-ui、stylus等等常用插件

步驟二

1.在main.js中引入router、element-ui等

import Vue from 'vue'
import store from './store' //可以先忽略
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false
Vue.use(ElementUI)
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

2.可以寫組件了

<template>
  <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm login-container">
  <el-form-item label="賬號" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
   <el-form-item label="密碼" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" auto-complete="off"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm">提交</el-button>
  </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      ruleForm: {
        name: '',
        pass: ''
      },
      rules: {
        name: [
          { required: true, message: '請輸入登錄賬號', trigger: 'blur' }
        ],
        pass: [
          { required: true, message: '請輸入登錄密碼', trigger: 'blur' }
        ]
      }
    }
  },
}

步驟三

走到這一步就很懵逼了吧,,, 我也是,所以還是先看到效果先吧
1.注冊組件,在router文件這里

import Vue from 'vue'
import Router from 'vue-router'
import Login from 'components/login/index'
const _import = require('./_import_' + process.env.NODE_ENV)//沒用上當(dāng)沒看見吧,我就是要寫這
Vue.use(Router)
export const constantRouterMap = [
  {
    path: '/',
     component:Login,
     name:'登錄'
    },
]
export default new Router({
  routes: constantRouterMap
})

emmmm....我猜組件應(yīng)該渲染出來了,很好!next

步驟四

關(guān)鍵性的步驟到了,看起來很難的vuex
1.第一步,先寫好接口方便調(diào)用,放在api文件夾里的login.js

import axios from 'axios'
import { server } from './config'

// 登陸
export const requestLogin = params => {
  return axios.post(server + '/jade/user/loginManage.action', params, {
    withCredentials: true, // 跨域憑證
    transformRequest: [function(data) {
      let ret = ''
      for (const it in data) {
        ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
      } // axios官方文檔關(guān)于怎么用每個參數(shù)是什么說的特別特別清楚,我百度過的
      return ret
    }],
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(res => {
    return Promise.resolve(res.data)
  }, err => {
    console.log(err)
  })
}

2.利用js-cookie插件來存儲用戶信息

import Cookie from 'js-cookie'

export function getToken() {
  return Cookie.get(TokenKey)
}

export function setToken(token) {
  return Cookie.set(TokenKey, token)
}

export function removeToken() {
  return Cookie.remove(TokenKey)
}

export function getRole() {
  return sessionStorage.getItem('rules')
}

3.好了可以寫actions了

import { requestLogin } from 'api/login'
import { getToken,setToken,removeToken } from '../../utils/auth'

const user = {
  state: {
    token: getToken(),
    name: '',
    avatar: ''
  },

  mutations: {
    SET_TOKEN: (state, token) => {
      state.token = token
    }
  },

  actions: {
    // 登錄
    Login ({commit}, userInfo) {
      const account = userInfo.account
      const password = userInfo.checkPass
      return new Promise((resolve, reject) => {
        console.log(resolve)
        console.log(reject)
        let params = {
          account: account,
          password: password
        }
        requestLogin(params).then(response => {
          const data = response.result
          setToken(data.sid)
          sessionStorage.setItem('accountType', data.accountType)
          commit('SET_TOKEN', data.sid)
          resolve(response)
        }).catch(error => {
          reject(error)
        })
      })
    }
  }
}

export default user

3.別忘了要注冊store

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'

Vue.use(Vuex)

const store = new Vuex.Store({
    modules: {
        user,
    }
})

export default store

最后一步使用,回到組件

 methods: {
    submitForm() {
      this.$refs.ruleForm.validate((valid)=>{
        if(valid) {
          console.log(this.$store)
         this.$store.dispatch('Login',this.ruleForm).then((res)=>{
           console.log(res)
           if(res.success) {
             this.$router.push({path:'/'})
           }else{
             this.$message.error(res.result.error)
           }
         })
        }
      })
    }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容