思路
uniapp就是基于vue的开发,构造自定义组件就和vue的自定义一样。如下例子。
例子
在pages/index/components下建立category.vue组件,如下图所示:
javascript
<template>
<view class="category-top">
分类组件
</view>
</template>
<script>
</script>
<style>
.category-top{
margin-top: 100rpx;
}
</style>
在index.vue中进行注册,完整代码如下:
javascript
<template>
<view class="index-box">
<bannerVue></bannerVue>
<categoryBox></categoryBox>
</view>
</template>
<script>
import bannerVue from '../../components/common/banner.vue'
import categoryBox from './components/category.vue'
export default {
components: {bannerVue, categoryBox},
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
}
}
</script>
运行效果如下:

下面完善下category.vue相关的代码。
javascript
<template>
<view class="category-top">
<view class="category-box">
<view v-for="(item, index) in categoryList" :key="index">
{{item.name}}
</view>
</view>
</view>
</template>
<script>
export default{
props:{
categoryList: {
type: Array,
default: () => [
{
id: 1,
name: 'java'
},
{
id: 2,
name: 'C++'
},
{
id: 3,
name: 'PHP'
},
{
id: 4,
name: 'Python'
},
{
id: 5,
name: 'JavaScript'
}
]
}
}
}
</script>
<style>
.category-top{
margin-top: 100rpx;
}
</style>
运行截图如下:

下面美化,设置一些css。
完整代码如下:
javascript
<template>
<view class="category-top">
<view class="category-box">
<view v-for="(item, index) in categoryList" :key="index">
{{item.name}}
</view>
</view>
</view>
</template>
<script>
export default{
props:{
categoryList: {
type: Array,
default: () => [
{
id: 1,
name: 'java'
},
{
id: 2,
name: 'C++'
},
{
id: 3,
name: 'PHP'
},
{
id: 4,
name: 'Python'
},
{
id: 5,
name: 'JavaScript'
},
{
id: 6,
name: 'HTML'
},
{
id: 7,
name: 'Web'
},
{
id: 8,
name: 'ALL'
}
]
}
}
}
</script>
<style lang="scss">
.category-top{
margin-top: 50rpx;
}
.category-box{
display: flex;
justify-content: space-around;
flex-wrap: wrap;
padding: 20rpx 30rpx 0 30rpx;
>view{
width: 160rpx;
height: 70rpx;
background: #C0C0C0;
text-align: center;
line-height: 70rpx;
font-size: 26rpx;
border-radius: 20rpx;
overflow: hidden;
margin-top: 15rpx;
}
}
</style>
运行截图如下:

再次调整,只需要一行分类,categoryList.slice(0, 4)
完整代码如下:
javascript
<template>
<view class="category-top">
<view class="category-box">
<view v-for="(item, index) in categoryList.slice(0, 4)" :key="index">
{{item.name}}
</view>
</view>
</view>
</template>
<script>
export default{
props:{
categoryList: {
type: Array,
default: () => [
{
id: 1,
name: 'java'
},
{
id: 2,
name: 'C++'
},
{
id: 3,
name: 'PHP'
},
{
id: 4,
name: 'Python'
},
{
id: 5,
name: 'JavaScript'
},
{
id: 6,
name: 'HTML'
},
{
id: 7,
name: 'Web'
},
{
id: 8,
name: 'ALL'
}
]
}
}
}
</script>
<style lang="scss">
.category-top{
margin-top: 50rpx;
}
.category-box{
display: flex;
justify-content: space-around;
flex-wrap: wrap;
padding: 20rpx 30rpx 0 30rpx;
>view{
width: 160rpx;
height: 70rpx;
background: #C0C0C0;
text-align: center;
line-height: 70rpx;
font-size: 26rpx;
border-radius: 20rpx;
overflow: hidden;
margin-top: 15rpx;
}
}
</style>