在本文中你将收获
在根目录新建components文件夹,建立cell 文件夹,右击创建cell的Component组件
页面的xxx.json ,usingComponent注册
"usingComponents": {
"item":"/components/item/item"
}
<item>item>
<view class="cell cell-class">
view>
/* pages/com/com.wxss */
.cell{
color: tomato;
}
.mycell{
color: #f70;
line-height: 120rpx !important;
}
/* 选项 */
options:{
/* 样式隔离:apply-shared 父影响子
shared 父子相互影响 isolated 相互隔离
*/
styleIsolation:'isolated',
},
//通过组件的外部类实现父组件控制自己的样式
externalClasses:["cell-class"],
<cell>cell>
<cell cell-class="mycell">cell>
<view class="cell">
我是cell组件
<slot>slot>
view>
/* 选项 */
options:{
//允许多个插槽
multipleSlots:true,
},
.cell{
height: 88rpx;
line-height: 88rpx;
border-bottom: 1rpx solid #cccccc;
}
<cell>
<text>放假text>
<text>快点到来text>
cell>
<view class="cell cell-class">
<slot name="pre">slot>
我是cell组件
<slot>slot>
<slot name="next">slot>
view>
/* 选项 */
options:{
//允许多个插槽
multipleSlots:true,
},
.cell{
height: 88rpx;
line-height: 88rpx;
border-bottom: 1rpx solid #cccccc;
}
<cell>
<text slot="pre">🐱👓text>
<text slot="next">🐱🚀text>
<text>放假text>
<text>快点到来text>
cell>
<cell cell-class="mycell">
<text slot="next">🎉text>
<text slot="pre">🐱text>
<text>做核酸text>
<text>今天要做text>
cell>
<view class="cell">
<text>{{title}}text>
<text>{{num}}text>
view>
// components/cell/cell.js
Component({
/* 选项 */
options:{
/* 样式隔离:apply-shared 父影响子
shared 父子相互影响 isolated 相互隔离
*/
styleIsolation:'isolated',
//允许多个插槽
multipleSlots:true,
},
/**
* 组件的属性列表
*/
properties: {
title:{
type:String,
value:""
},
num:{
type:Number,
value:1
}
},
/**
* 组件的初始数据
*/
data: {
//定义组件自己的数据count
count:1
},
/**
* 组件的方法列表
*/
})
<cell title="做核酸" num="{{5}}">cell>
<cell title="烦呐">cell>
<view class="cell" bindtap="tapHd">
<text>{{title}}text>
<text>{{count}}text>
view>
// components/cell/cell.js
Component({
/* 选项 */
options:{
/* 样式隔离:apply-shared 父影响子
shared 父子相互影响 isolated 相互隔离
*/
styleIsolation:'isolated',
//允许多个插槽
multipleSlots:true,
},
/**
* 组件的属性列表
*/
properties: {
title:{
type:String,
value:""
},
num:{
type:Number,
value:1
}
},
/**
* 组件的初始数据
*/
data: {
//定义组件自己的数据count
count:1
},
lifetimes:{
//在组件生命周期attached挂载更新count
attached(){
console.log(this.data);
//count 的值为父组件传递的num值
this.setData({count:this.data.num})
}
},
/**
* 组件的方法列表
*/
methods: {
tapHd(){
this.setData({count:this.data.count+5})
//发送一个事件
this.triggerEvent("cellclick",this.data.count)
}
}
})
<view class="cell" bindtap="tapHd">
<text>{{title}}text>
<text>{{count}}text>
view>
<navigator class="item itemclass" url="{{url}}" open-type="{{openType}}" bindtap="itemclick">
<view class="icon" wx:if="{{icon}}">
<image src="{{icon}}" mode="aspectFill"/>
view>
<view class="content">
<view class="title" wx:if="{{title}}">
{{title}}
view>
<slot name="title" wx:else >slot>
<view class="right" wx:if="{{!showrslot}}">
<view class="tip">{{tip}}view>
<view class="badge" wx:if="{{badge}}">
<view wx:if="{{badge===true}}" class="dot"> view>
<view wx:else class="redbadge">{{badge}}view>
view>
<view class="arrow">view>
view>
<slot name="right" wx:else>slot>
view>
navigator>
/* components/item/item.wxss */
.item{
line-height: 88rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.icon{
margin-left: 30rpx;
margin-right: 30rpx;
height: 100%;
display: flex;
align-items: center;
}
.icon image{
width: 60rpx;
height: 60rpx;
}
.content{
padding: 0 30rpx;
border-bottom: 1rpx solid #ccc;
display: flex;
flex: 1;
}
.title{
flex: 1;
color: #333;
font-size: 35rpx;
}
.right{
display: flex;
align-items: center;
}
.right .arrow{
height: 25rpx;
width: 25rpx;
border-top: 3rpx solid #999;
border-right: 3rpx solid #999;
transform: rotate(45deg);
}
.tip{
color: #999;
font-size: 28rpx;
}
.dot{
height: 15rpx;
width: 15rpx;
background-color: #f30;
margin-left: 15rpx;
border-radius: 50%;
}
.redbadge{
font-size: 20rpx;
padding: 5rpx;
background-color: #f30;
width: 30rpx;
max-height: 30rpx;
line-height: 30rpx;
color: #fff;
text-align: center;
margin-left: 15rpx;
border-radius: 20rpx;
}
<!-- 引用组件的json文件 -->
{
"usingComponents": {
"cell": "/components/cell/cell"
}
}
<item title="支付" icon="/images/icon01.png">item>
<item title="相册" icon="/images/icon02.png">item>
<item title="设置" >item>
<item title="朋友圈" icon="/images/icon03.png" badge="{{true}}" tip="10条消息未读">item>
<item title="卡包" icon="/images/icon04.png" badge="{{12}}" tip="12条消息未读">item>
<item title="服务" icon="/images/icon05.png" showrslot="{{true}}">
<switch checked="true" slot="right" />
item>
<item>
<view slot="title">插槽titleview>
item>
<item title="新闻" icon="/images/icon07.png" url="/pages/index/index" open-type="switchTab">item>
<item title="life" icon="/images/icon08.png" url="/pages/life/life" >item>
<item title="消息" icon="/images/icon06.png" showrslot="{{true}}" itemclass="myitem">
<switch checked="true" slot="right" />
item>
.myitem{
line-height: 120rpx !important;
background-color: #f0f0f0;
}
【Vue】描述项目中两个功能模块的业务(一点见解)
【Git】Git基础操作一文详解,入门易懂(附图和案例
【Vue3】整理的一些Vue3知识点和案例(Vue3 获取窗口宽和高)