一,自定義組件
從小程序基礎庫版本?1.6.3?開始,小程序支持簡潔的組件化編程。所有自定義組件相關特性都需要基礎庫版本?1.6.3?或更高。
開發(fā)者可以將頁面內的功能模塊抽象成自定義組件,以便在不同的頁面中重復使用;也可以將復雜的頁面拆分成多個低耦合的模塊,有助于代碼維護。自定義組件在使用時與基礎組件非常相似
創(chuàng)建自定義組件
1.1 建立文件
1.2 修改文件及添加文件
類似于頁面,一個自定義組件由?json
?wxml
?wxss
?js
?4個文件組成。要編寫一個自定義組件,首先需要在?json
?文件中進行自定義組件聲明(將?component
?字段設為?true
?可將這一組文件設為自定義組件):
首先需要在 json 文件中進行自定義組件聲明(將 component 字段設為 true 可將這一組文件設為自定義組件)
tabs.json:
在project.config.json添加行代碼 :
二,個人中心布局
2.1 創(chuàng)建自定義組件
tabs.wxml:
<!--components/tabs/tabs.wxml-->
<!-- <text>components/tabs/tabs.wxml</text> -->
<!-- 這是自定義組件的內部WXML結構 -->
<view class="tabs">
<view class="tabs_title">
<view wx:for="{{tabList}}" wx:key="id" class="title_item {{index==tabIndex?'item_active':''}}" bindtap="handleItemTap" data-index="{{index}}">
<view style="margin-bottom:5rpx">{{item}}</view>
<view style="width:30px" class="{{index==tabIndex?'item_active1':''}}"></view>
</view>
</view>
<view class="tabs_content">
<slot></slot>
</view>
</view>
tabs.wxss:
.tabs {
position: fixed;
top: 0;
width: 100%;
background-color: #fff;
z-index: 99;
border-bottom: 1px solid #efefef;
padding-bottom: 20rpx;
}
.tabs_title {
/* width: 400rpx; */
width: 90%;
display: flex;
font-size: 9pt;
padding: 0 20rpx;
}
.title_item {
color: #999;
padding: 15rpx 0;
display: flex;
flex: 1;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
}
.item_active {
/* color:#ED8137; */
color: #000000;
font-size: 11pt;
font-weight: 800;
}
.item_active1 {
/* color:#ED8137; */
color: #000000;
font-size: 11pt;
font-weight: 800;
border-bottom: 6rpx solid #333;
border-radius: 2px;
}
?tabs.js:
var App = getApp();
Component({
/**
* 組件的屬性列表
*/
properties: {
tabList:Object
},
/**
* 組件的初始數(shù)據(jù)
*/
data: {
tabIndex:0
},
/**
* 組件的方法列表
*/
methods: {
handleItemTap(e){
// 獲取索引
const {index} = e.currentTarget.dataset;
// 觸發(fā) 父組件的事件
this.triggerEvent("tabsItemChange",{index})
this.setData({
tabIndex:index
})
}
}
})
?2.2 使用自定義組件
需要在哪個頁面中進行使用,就需要在哪個頁面中進行引用配置.
比如說 : 需要在會議頁面中進行使用,就要在會議頁面.json (meeting/list/list.json)下配置即可。
本案例是配置在會議模塊中,那就是在.json (meeting/list/list.json)中配置。
meeting目錄下的list.json:
{
"usingComponents": {
"tabs": "/components/tabs/tabs"
}
}
meeting目錄下的list.js的data中定義屬性:
tabs:['會議中','已完成','已取消','全部會議']
meeting目錄下的list.wxml:
<tabs tabList="{{tabs}}" bindtabsItemChange="tabsItemChange">
</tabs>
效果:
2.3 會議模塊布局
? ? 點擊相應的內容顯示相應的數(shù)據(jù),我們只需將所點擊內容的index值傳遞,根據(jù)index值的不同進行不同數(shù)據(jù)的遍歷即可
2.3.1 數(shù)據(jù)
在list.js定義:
// pages/meeting/list/list.js
Page({
/**
* 頁面的初始數(shù)據(jù)
*/
data: {
tabs:['會議中','已完成','已取消','全部會議'],
lists: [
{
'id': '1',
'image': '/static/persons/1.jpg',
'title': '對話產(chǎn)品總監(jiān) | 深圳·北京PM大會 【深度對話小米/京東/等產(chǎn)品總監(jiān)】',
'num':'304',
'state':'進行中',
'time': '10月09日 17:59',
'address': '深圳市·南山區(qū)'
},
{
'id': '2',
'image': '/static/persons/2.jpg',
'title': 'AI WORLD 2016世界人工智能大會',
'num':'380',
'state':'進行中',
'time': '10月09日 17:39',
'address': '北京市·朝陽區(qū)'
},
{
'id': '3',
'image': '/static/persons/3.jpg',
'title': 'H100太空商業(yè)大會',
'num':'500',
'state':'進行中',
'time': '10月09日 17:31',
'address': '大連市'
},
{
'id': '1',
'image': '/static/persons/4.jpg',
'title': '報名年度盛事,大咖云集!2016鳳凰國際論壇邀您“與世界對話”',
'num':'150',
'state':'進行中',
'time': '10月09日 17:21',
'address': '北京市·朝陽區(qū)'
},
{
'id': '1',
'image': '/static/persons/5.jpg',
'title': '新質生活 · 品質時代 2016消費升級創(chuàng)新大會',
'num':'217',
'state':'進行中',
'time': '10月09日 16:59',
'address': '北京市·朝陽區(qū)'
}
],
lists1: [
{
'id': '1',
'image': '/static/persons/7.jpg',
'title': '對話產(chǎn)品總監(jiān) | 深圳·北京PM大會 【深度對話小米/京東/等產(chǎn)品總監(jiān)】',
'num':'304',
'state':'已結束',
'time': '10月09日 17:59',
'address': '深圳市·南山區(qū)'
},
{
'id': '1',
'image': '/static/persons/6.jpg',
'title': 'AI WORLD 2016世界人工智能大會',
'num':'380',
'state':'已結束',
'time': '10月09日 17:39',
'address': '北京市·朝陽區(qū)'
},
{
'id': '1',
'image': '/static/persons/1.jpg',
'title': 'H100太空商業(yè)大會',
'num':'500',
'state':'已結束',
'time': '10月09日 17:31',
'address': '大連市'
}
],
lists2: [
{
'id': '1',
'image': '/static/persons/4.jpg',
'title': '對話產(chǎn)品總監(jiān) | 深圳·北京PM大會 【深度對話小米/京東/等產(chǎn)品總監(jiān)】',
'num':'304',
'state':'進行中',
'time': '10月09日 17:59',
'address': '深圳市·南山區(qū)'
},
{
'id': '1',
'image': '/static/persons/3.jpg',
'title': 'AI WORLD 2016世界人工智能大會',
'num':'380',
'state':'已結束',
'time': '10月09日 17:39',
'address': '北京市·朝陽區(qū)'
}
],
lists3: [
{
'id': '1',
'image': '/static/persons/7.jpg',
'title': '對話產(chǎn)品總監(jiān) | 深圳·北京PM大會 【深度對話小米/京東/等產(chǎn)品總監(jiān)】',
'num':'304',
'state':'進行中',
'time': '10月09日 17:59',
'address': '深圳市·南山區(qū)'
},
{
'id': '1',
'image': '/static/persons/2.jpg',
'title': 'AI WORLD 2016世界人工智能大會',
'num':'380',
'state':'已結束',
'time': '10月09日 17:39',
'address': '北京市·朝陽區(qū)'
},
{
'id': '1',
'image': '/static/persons/4.jpg',
'title': 'H100太空商業(yè)大會',
'num':'500',
'state':'進行中',
'time': '10月09日 17:31',
'address': '大連市'
},
{
'id': '1',
'image': '/static/persons/5.jpg',
'title': '報名年度盛事,大咖云集!2016鳳凰國際論壇邀您“與世界對話”',
'num':'150',
'state':'已結束',
'time': '10月09日 17:21',
'address': '北京市·朝陽區(qū)'
},
{
'id': '1',
'image': '/static/persons/1.jpg',
'title': '新質生活 · 品質時代 2016消費升級創(chuàng)新大會',
'num':'217',
'state':'進行中',
'time': '10月09日 16:59',
'address': '北京市·朝陽區(qū)'
}
]
},
tabsItemChange(e){
let tolists;
if(e.detail.index==1){
tolists = this.data.lists1;
}else if(e.detail.index==2){
tolists = this.data.lists2;
}else{
tolists = this.data.lists3;
}
this.setData({
lists: tolists
})
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面加載
*/
onLoad(options) {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面顯示
*/
onShow() {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面隱藏
*/
onHide() {
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面卸載
*/
onUnload() {
},
/**
* 頁面相關事件處理函數(shù)--監(jiān)聽用戶下拉動作
*/
onPullDownRefresh() {
},
/**
* 頁面上拉觸底事件的處理函數(shù)
*/
onReachBottom() {
},
/**
* 用戶點擊右上角分享
*/
onShareAppMessage() {
}
})
2.1.2?顯示
在list.wxml定義:
<!--pages/meeting/list/list.wxml-->
<tabs tabList="{{tabs}}" bindtabsItemChange="tabsItemChange">
</tabs>
<view style="height: 100rpx;"></view>
<block wx:for-items="{{lists}}" wx:for-item="item" wx:key="item.id">
<view class="list" data-id="{{item.id}}">
<view class="list-img al-center">
<image class="video-img" mode="scaleToFill" src="{{item.image}}"></image>
</view>
<view class="list-detail">
<view class="list-title"><text>{{item.title}}</text></view>
<view class="list-tag">
<view class="state al-center">{{item.state}}</view>
<view class="join al-center"><text class="list-num">{{item.num}}</text>人報名</view>
</view>
<view class="list-info"><text>{{item.address}}</text>|<text>{{item.time}}</text></view>
</view>
</view>
</block>
<view class="section bottom-line">
<text>到底啦</text>
</view>
2.1.3?樣式
在list.wxss定義:
/* pages/meeting/list/list.wxss */
.list {
display: flex;
flex-direction: row;
width: 100%;
padding: 0 20rpx 0 0;
border-top: 1px solid #eeeeee;
background-color: #fff;
margin-bottom: 5rpx;
/* border-radius: 20rpx;
box-shadow: 0px 0px 10px 6px rgba(0,0,0,0.1); */
}
.list-img {
display: flex;
margin: 10rpx 10rpx;
width: 150rpx;
height: 220rpx;
justify-content: center;
align-items: center;
}
.list-img .video-img {
width: 120rpx;
height: 120rpx;
}
.list-detail {
margin: 10rpx 10rpx;
display: flex;
flex-direction: column;
width: 600rpx;
height: 220rpx;
}
.list-title text {
font-size: 11pt;
color: #333;
font-weight: bold;
}
.list-detail .list-tag {
display: flex;
height: 70rpx;
}
.list-tag .state {
font-size: 9pt;
color: #81aaf7;
width: 120rpx;
border: 1px solid #93b9ff;
border-radius: 2px;
margin: 10rpx 0rpx;
display: flex;
justify-content: center;
align-items: center;
}
.list-tag .join {
font-size: 11pt;
color: #bbb;
margin-left: 20rpx;
display: flex;
justify-content: center;
align-items: center;
}
.list-tag .list-num {
font-size: 11pt;
color: #ff6666;
}
.list-info {
font-size: 9pt;
color: #bbb;
margin-top: 20rpx;
}
.bottom-line{
display: flex;
height: 60rpx;
justify-content: center;
align-items: center;
background-color: #f3f3f3;
}
.bottom-line text{
font-size: 9pt;
color: #666;
}
效果:
三、個人中心布局
3.1 布局
在個人中心頁面中編寫 .wxml 文件如 : ucenter/index/index.wxml)進行頁面顯示
布局
index.wxml:
<!--pages/ucenter/index/index.wxml-->
<!-- <text>pages/ucenter/index/index.wxml</text> -->
<view class="user">
<image class="user-img" src="/static/persons/8.jpg"></image>
<view class="user-name">Bing</view>
<text class="user-up">修改</text>
</view>
<view class="cells">
<view class="cell-items">
<image src="/static/tabBar/coding-active.png" class="cell-items-icon"></image>
<text class="cell-items-title">我主持的會議</text>
<text class="cell-items-num">5</text>
<text class="cell-items-detail">??</text>
</view>
<view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);"></view>
<view class="cell-items">
<image src="/static/tabBar/sdk.png" class="cell-items-icon"></image>
<text class="cell-items-title">我參與的會議</text>
<text class="cell-items-num">3</text>
<text class="cell-items-detail">??</text>
</view>
</view>
<view style="height: 27rpx;background-color: rgba(135, 206, 250, 0.075);"></view>
<view class="cells">
<view class="cell-items">
<image src="/static/tabBar/sdk.png" class="cell-items-icon"></image>
<text class="cell-items-title">我發(fā)布的投票</text>
<text class="cell-items-num">6</text>
<text class="cell-items-detail">??</text>
</view>
<view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);"></view>
<view class="cell-items">
<image src="/static/tabBar/coding-active.png" class="cell-items-icon"></image>
<text class="cell-items-title">我參與的投票</text>
<text class="cell-items-num">8</text>
<text class="cell-items-detail">??</text>
</view>
</view>
<view style="height: 27rpx;background-color: rgba(135, 206, 250, 0.075);"></view>
<view class="cells">
<view class="cell-items">
<image src="/static/tabBar/template.png" class="cell-items-icon"></image>
<text class="cell-items-title">信息</text>
<text class="cell-items-ion">??</text>
</view>
<view style="height: 5rpx;background-color: rgba(135, 206, 250, 0.075);"></view>
<view class="cell-items">
<image src="/static/tabBar/component.png" class="cell-items-icon"></image>
<text class="cell-items-title">設置</text>
<text class="cell-items-ion">??</text>
</view>
</view>
3.2 樣式
在ucenter/index/index.wxss下編寫即可
index.wxss:
/* pages/ucenter/index/index.wxss */
Page{
background-color: rgba(135, 206, 250, 0.075);
}
.user{
display: flex;
width: 100%;
align-items:center;
background-color: white;
margin-bottom: 28rpx;
}
.user-img{
height: 170rpx;
width: 170rpx;
margin: 30rpx;
border: 1px solid #cdd7ee;
border-radius: 6px;
}
.user-name{
width: 380rpx;
margin-left: 20rpx;
font-weight: 550;
}
.user-up{
color: rgb(136, 133, 133);
}
.cells{
background-color: white;
}
.cell-items{
display: flex;
align-items:center;
height: 110rpx;
}
.cell-items-title{
width: 290rpx;
}
.cell-items-icon{
width: 50rpx;
height: 50rpx;
margin: 20rpx;
}
.cell-items-num{
padding-left: 30rpx;
margin-left: 200rpx;
width: 70rpx;
}
.cell-items-ion{
margin-left: 295rpx;
}
效果:文章來源:http://www.zghlxwxcb.cn/news/detail-714563.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-714563.html
到了這里,關于小程序中如何使用自定義組件應用及搭建個人中心布局的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!