分类了,弹窗出不来
来源:3-7 通过代码拆分增加逻辑可维护性
慕田峪1427181
2022-11-15 12:13:13
<template>
<ul class="wrapper">
<li class="wrapper_item">
<img src="http://www.dell-lee.com/imgs/vue3/user.png" alt="" class="wrapper_img">
</li>
<li class="wrapper_input">
<input type="text" placeholder="用户名" class="wrapper_input_content" v-model='data.username'>
</li>
<li class="wrapper_input">
<input type="password" placeholder="请输入手机号" class="wrapper_input_content" v-model='data.password'>
</li>
<li class="wrapper_button" @click="handlelogin">
登陆
</li>
<li @click="handleRegisterClick">
立即注册
</li>
<Toast v-if="data.showToast" :message='toastData.ToastMessage' />
</ul>
</template>
<script>
import { reactive } from 'vue';
import { useRouter } from 'vue-router';
import { post } from '../../utils/request';
import Toast from '../../components/Toast.vue'
const userToastEffect = () => {
const toastData = reactive({
showToast: false,
ToastMessage: ''
})
const changeToast = (Message) => {
toastData.showToast = true;
toastData.ToastMessage = Message
setTimeout(() => {
toastData.showToast = false;
toastData.ToastMessage = ''
}, 2000);
}
return {
toastData, changeToast
}
}
export default {
name: 'Login',
components: {
Toast
},
setup() {
const router = useRouter();
const data = reactive({
username: '',
password: '',
})
const { toastData, changeToast } = userToastEffect();
const handlelogin = async () => {
try {
const result = await post('1111/api/user/login', {
username: data.username,
password: data.password
})
if (result?.errno === 0) {
localStorage.isLogin = true;
router.push({ name: 'home' })
} else {
changeToast('登陆失败')
console.log('00');
// data.showToast = true;
// data.ToastMessage = '登陆失败'
}
} catch (e) {
changeToast('请求失败')
// data.showToast = true;
// data.ToastMessage = '请求失败'
}
// .then((result) => {
// localStorage.isLogin = true;
// router.push({name:'home'})
// }).catch((err) => {
// alert('000')
// });
}
const handleRegisterClick = () => {
// console.log(1212);
router.push({ name: 'Register' })
}
return { handlelogin, handleRegisterClick, data, toastData }
}
}
</script>
<style lang="scss" scoped>
.wrapper {
display: flex;
flex-direction: column;
align-items: center;
position: absolute;
top: 50%;
left: 0;
right: 0;
transform: translateY(-59%);
margin: auto 0;
&_item {
margin-bottom: 4rem
/* 40/10 */
;
}
&_img {
width: 6.6rem
/* 66/10 */
;
height: 6.6rem
/* 66/10 */
;
}
&_button {
width: 29.5rem
/* 295/10 */
;
height: 4.8rem
/* 48/10 */
;
background: #0091FF;
box-shadow: 0 4px 8px 0 rgba(0, 145, 255, 0.32);
border-radius: 4px;
color: white;
text-align: center;
line-height: 4.8rem
/* 48/10 */
;
font-size: 1.6rem
/* 16/10 */
;
}
}
.wrapper_input {
width: 29.5rem
/* 295/10 */
;
height: 4.8rem
/* 48/10 */
;
border: 1px solid rgba(0, 0, 0, 0.10);
border-radius: 6px;
margin: 0 4rem
/* 40/10 */
1.6rem
/* 16/10 */
;
padding: 0 1.6rem
/* 16/10 */
;
background: #F9F9F9;
}
.wrapper li:nth-child(4) {
margin-bottom: 1.6rem
/* 16/10 */
;
}
.wrapper li span {
margin-right: 1.2rem
/* 12/10 */
;
color: rgba(0, 0, 0, 0.50);
}
.wrapper_input_content {
width: 100%;
height: 100%;
background: none;
}
</style>
1回答
好帮手慕小李
2022-11-15
同学你好,因为showToast已经转到了toastData中,所以需要使用toastData.showToast.如下:

同学改过来试试,祝学习愉快!
相似问题