组件 (Component) 是 Vue.js 最强大的功能之一。用来封装可重用的代码或者封装一个单独的模块,比如我们上一节的登录弹窗,下面我们来演示一下如何将代码提取到组件
1、创建组件
在src/components文件夹下面创建一个LoginWindow.vue文件
写入vue基础代码
<template>
<div>
登录弹窗组件
</div>
</template>
<script>
export default {
}
</script>
<style lang='scss'>
</style>
2、添加样式代码
将index.vue文件中上一节课添加的样式代码,剪切到我们刚刚创建的LoginWindow.vue文件中。注意是剪切哦~
剪切到LoginWindow.vue文件中的标签中
.modal-mask {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
background: #000;
opacity: 0.5;
overflow: hidden;
z-index: 9000;
color: #fff;
}
.modal-dialog {
box-sizing: border-box;
width: 560rpx;
overflow: hidden;
position: fixed;
top: 30%;
left: 0;
z-index: 9999;
background: #fff;
margin: -150rpx 95rpx;
border-radius: 16rpx;
}
.modal-content {
box-sizing: border-box;
display: flex;
padding: 0rpx 53rpx 50rpx 53rpx;
font-size: 32rpx;
align-items: center;
justify-content: center;
flex-direction: column;
}
.content-tip {
text-align: center;
font-size: 36rpx;
color: #333333;
}
.content-text {
height:130px;
padding:10px 0px 50px 0px;
font-size:14px;
}
.modal-footer {
box-sizing: border-box;
display: flex;
flex-direction: row;
border-top: 1px solid #e5e5e5;
font-size: 16px;
font-weight:bold;
height: 45px;
line-height: 45px;
text-align: center;
background:#feb600;
}
button {
width: 100%;
background:#feb600;
color:#FFFFFF;
font-weight:bold;
}
.img {
width: 280px;
height:90px;
}
.little-tip {
padding-top:15px;
padding-bottom:3px;
font-size: 14px;
font-weight:bold;
color: #feb600;
}
.little-content {
padding-top:5px;
font-size: 13px;
color:#606060;
}
.key-bold {
padding-top:5px;
font-size: 14px;
font-weight:bold;
}
3、编辑script部分
(1)在LoginWindow.vue文件中标签内添加methods对象,并将index.vue文件中的登录方法剪切到methods对象中
//参考代码,无需粘贴
//<script>
//export default {
//methods: {
//需要剪切粘贴的部分,从index.vue剪切到LoginWindow.vue文件
loginSuccess (res) {
//将用户信息保存到缓存中,wx.setStorageSync是小程序的一个API,用来将信息添加到缓存中
wx.setStorageSync('userinfo', res)
},
login () {
//wx.showToast是小程序的消息提示框API
wx.showToast({
title: '登录中',
icon: 'loading'
})
//通过SDK插件,请求config.js中配置的loginUrl路径(http://localhost:5757/weapp/login)
qcloud.setLoginUrl(config.loginUrl)
qcloud.login({
success: res => {
//登录成功后,显示底部导航栏
wx.showTabBar()
console.log('登录成功', res)
//调用loginSuccess方法,并将用户信息作为参数
this.loginSuccess(res)
},
fail: err => {
console.error('登录失败', err)
}
})
}
//参考代码,无需粘贴
//}
//}
//</script>
(2)import引用语句
将import引用SDK插件、config.js语句剪切到LoginWindow.vue文件中
//参考代码,无需粘贴
//<script>
//需要粘贴的部分
import qcloud from 'wafer2-client-sdk'
import config from '@/config'
4、编辑template部分
将登录弹窗部分的页面代码也剪切到LoginWindow.vue文件中
<!-- 参考代码,无需粘贴
<template>
<div> -->
<!--需要剪切粘贴的部分-->
<div class="modal-mask">
</div>
<div class="modal-dialog">
<div class="modal-content">
<img class="img" src="/static/images/littleTip-huang.jpg">
<div class="content-text">
<p class="key-bold">真自律是一款自律神器。</p>
<p class="key-bold">将生活想象成通关打怪,打败自己的心魔加分,被心魔打败减分。</p>
<p class="little-tip">举个例子:</p>
<p class="little-content">
午饭忍住没有吃麻辣烫,吃的绿色蔬菜,加5分;
</p>
<p class="little-content">
但是晚饭还是没有忍住T_T,罪恶罪恶,减10分。
</p>
</div>
</div>
<div class="modal-footer">
<!-- 小程序集成的API,通过button来授权登录 -->
<button open-type="getUserInfo" lang="zh_CN" class='btn' @getuserinfo="login">授权登录</button>
</div>
</div>
<!-- 参考代码,无需粘贴
</div>
</template> -->
5、编辑index.vue文件
(1)在index.vue文件中关联组件
通过import引入组件,并添加components对象声明组件
//参考代码,无需粘贴
//<script>
//需要粘贴的部分,通过import引入组件
import LoginWindow from '@/components/LoginWindow'
//参考代码,无需粘贴
//export default {
//需要粘贴的部分,添加components对象声明组件
components: {
LoginWindow
},
(2)编辑template部分,添加以组件命名的HTML元素
<!-- 参考代码,无需粘贴
<template>
<div> —>
<!-- 需要粘贴的部分 -->
<LoginWindow></LoginWindow>
<!-- 参考代码,无需粘贴
<div class="show"> -->
6、查看效果
在终端启动项目,微信开发者工具会出现与上一节一样的效果
作者:猫宁一
95后全栈程序媛₍ᐢ •⌄• ᐢ₎一枚~ 热爱学习!热爱编程!
可关注【猫宁一】公众号领取我所有全栈项目代码哦~点击查看课程目录:微信小程序全栈开发课程目录