实现一个只有前端的登录效果(页面刷新后会失效)。配合 vuex 来做。
达成的功能:
把 vuex 先引入进来
npm i vuex
main.js 中导入
import Vue from 'vue'
import App from './App'
+import store from './store'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
+ store,
template: '<App/>',
components: { App }
})
store/index.js 内容:
import Vue from 'vue'
import Vuex from 'vuex'
import auth from './modules/auth'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
auth
}
})
store/modules/auth.js 的内容:
const state = {
isAuthenticated: false,
currentUser: ''
}
export default {
state
}
有了上面的内容,就可以到 LoginForm.js 中使用 store 中的数据了
computed: {
isAuthenticated: function () {
return this.$store.state.auth.isAuthenticated
},
currentUser: function () {
return this.$store.state.auth.currentUser
}
}
LoginForm 中添加
<input v-model="username" />
<button @click="saveUser" >
保存
</button>
...
methods: {
saveUser: function () {
this.$store.commit('login', { username: this.username })
this.username = ''
}
},
data: function () {
return {
username: ''
}
},
store/modules/auth.js
const mutations = {
login (state, { username }) {
console.log('mutations', username)
state.currentUser = username
state.isAuthenticated = true
}
}
...
export default {
...
mutations
}
<template>
<div class='login-form'>
<div v-if="!isAuthenticated">
你是
<input v-model="username" />
<button @click="saveUser" >
保存
</button>
</div>
<div v-else>
我是
</div>
</div>
</template>
http://digicity-1253322599.costj.myqcloud.com/voteup-vuex-login.mp4