1.组件之间的共享数据的方式大概有一下几种
(1)父向子传输:v-bind
(2)子向付传输:v-on
(3)兄弟组:EventBus
$on :接受组件
$emit:发送组件
以上为组件间传输,更加适用于小范围的数据传输
2.VueX整体管理组件
使用方法
(1)直接在组件内用{ $vuex.state.xxx} 来调用
(2)在vuex中导入mapstate函数
import{mapstate}from ‘vuex’
映射入组件的computed计算属性
computed:{mapstate[‘count’]}
(3)调用方法
1.Vuex只能通过mutation变更store数据不可直接操作
2.方便容易全局查找维护
下面贴一些使用样例
vuex->store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
// 登录验证
export default new Vuex.Store({
state: {
user: false
},
mutations: {
// 登录
login(state, user) {
state.user = user;
localStorage.setItem("userInfo", user);
},
// 退出
logout(state, user) {
state.user = "";
localStorage.setItem("userInfo", "");
}
}
})
login.vue
<template>
<div class="login-wrap">
<el-form label-position="left" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="0px" class="demo-ruleForm login-container">
<h3 class="title">用户登录</h3>
<el-form-item prop="username">
<el-input type="text" v-model="ruleForm.username" auto-complete="off" placeholder="账号"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" v-model="ruleForm.password" auto-complete="off" placeholder="密码"></el-input>
</el-form-item>
<el-row>
</el-row>
<el-checkbox class="remember" v-model="rememberpwd">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-button type="primary" style="width:100%;" @click="submitForm('ruleForm')" :loading="logining">登录</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script type="text/ecmascript-6">
import { login } from '../api/userMG'
import { setCookie, getCookie, delCookie } from '../utils/util'
import md5 from 'js-md5'
export default {
name: 'login',
data() {
return {
//定义loading默认为false
logining: false,
// 记住密码
rememberpwd: false,
ruleForm: {
//username和password默认为空
username: '456',
password: '456',
},
//rules前端验证
rules: {
username: [{ required: true, message: '请输入账号', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }]
}
}
},
// 创建完毕状态(里面是操作)
created() {
this.$message({
message: '账号密码及验证码不为空即可',
type: 'success'
})
// 获取图形验证码
// this.getcode()
// 获取存在本地的用户名密码
this.getuserpwd()
},
// 里面的函数只有调用才会执行
methods: {
// 获取用户名密码
getuserpwd() {
if (getCookie('user') != '' && getCookie('pwd') != '') {
this.ruleForm.username = getCookie('user')
this.ruleForm.password = getCookie('pwd')
this.rememberpwd = true
}
},
//获取info列表
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log(this.ruleForm)
// this.logining = true
// 测试通道,不为空直接登录
// setTimeout(() => {
// this.logining = false
// this.$store.commit('login', 'true')
// this.$router.push({ path: '/User/UserList' })
// }, 1000)
// 注释
login(this.ruleForm).then(res => {
if (res.success) {
if (this.rememberpwd) {
//保存帐号到cookie,有效期7天
setCookie('user', this.ruleForm.username, 7)
//保存密码到cookie,有效期7天
setCookie('pwd', this.ruleForm.password, 7)
} else {
delCookie('user')
delCookie('pwd')
}
//如果请求成功就让他2秒跳转路由
setTimeout(() => {
this.logining = false
// 缓存token
localStorage.setItem('logintoken', res.data.token)
// 缓存用户个人信息
localStorage.setItem('userdata', JSON.stringify(res.data))
this.$store.commit('login', 'true')
this.$router.push({ path: '/User/userList' })
}, 1000)
} else {
console.log(res)
this.$message({
message: '账号密码错误',
type: 'error'
})
this.logining = false
return false
}
})
} else {
// 获取图形验证码
this.getcode()
this.$message.error('请输入用户名密码!')
this.logining = false
return false
}
})
},
}
}
</script>