组件通信
父子组件通讯
封装子组件
card组件:子组件
新建 components 文件夹,新建组件文件夹card,新建组件card(不是新建页面)
/components/card/card.wxml
xml
<!--components/card/card.wxml-->
<view class="card">
<!-- 卡片组件:item 即为展示商品 -->
<view class="item" wx:for="{{list}}" wx:key="id">
<image src="{{item.imageUrl}}" class="image" />
<view class="title">{{item.name}}</view>
<view class="subtitle">{{item.packing}}</view>
<view class="bottom">
<view class="price">{{item.price}}</view>
<view class="right">
<view class="money">{{item.marketPrice}}</view>
<image src="https://img02.hua.com/m/home/img/home_buy_btn.png" class="cart" />
</view>
</view>
</view>
</view>
/components/card/card.wxss
css
/* components/card/card.wxss */
.card {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
.card .item {
width: 360rpx;
background: white;
margin: 10rpx 0rpx;
border-radius: 30rpx;
}
.card .item .title{
font-weight: 900;
font-size: 26rpx;
}
.card .item .image {
width: 360rpx;
height: 360rpx;
border-radius: 40rpx;
}
.card .item .subtitle{
display: -webkit-box;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
font-size: 24rpx;
margin: 10rpx 0rpx;
height: 60rpx;
}
.card .item .bottom{
display: flex;
justify-content: space-around;
}
.card .item .bottom .right{
display: flex;
justify-content: space-between;
}
.card .item .cart {
width: 48rpx;
height: 48rpx;
margin-left: 20rpx;
}
.card .item .bottom .right .money{
color: #ccc;
text-decoration: line-through;
}
接收参数
/components/card/card.js
js
// components/card/card.js
Component({
/**
* 组件的属性列表
*/
//类似于 vue中的 props,接收props
properties: {
list:{
type:Array
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})
/components/card/card.json
json
{
"component": true,
"usingComponents": {}
}
引入组件
在页面上引用组件,并使用组件
在页面 中添加组件并注册
/pages/home/home.json
ts
{
"usingComponents": {
"card":"/components/card/card"
}
}
在页面中使用组件
传递参数
/pages/home.wxml
xml
<!--pages/home/home.wxml-->
<view class="home">
<!-- 轮播图 -->
<swiper class="swiper" indicator-dots indicator-color="pink" indicator-active-color="black" autoplay interval="2000" circular>
<swiper-item wx:for="{{bannerArr}}" wx:key="id">
<image src="{{item.imageUrl}}" mode="aspectFill" class="banner" />
</swiper-item>
</swiper>
<!-- 分类 -->
<view class="cate flex">
<!-- 动态设置伸缩项目的样式 -->
<view class="cate-item flex_c {{ index > 4 && 'bottom'}}" wx:for="{{categoryArr}}" wx:key="id">
<image src="{{item.imageUrl}}" mode="" class="cate-img"/>
<text class="cate-text">{{item.name}}</text>
</view>
</view>
<!-- 首页logo -->
<image src="https://img02.hua.com/zhuanti/valentine/2023/23_valentine_mbanner_m.png?a1" mode="widthFix" class="logo"/>
<!-- 底部猜你喜欢和热门推荐 -->
<view class="footer" >
<view class="like">猜你喜欢</view>
<!-- 引入组件 -->
<!-- 页面给组件传递参数:属性-类似于vue的props 不写 ":" -->
<card list="{{likeArr}}"></card>
<button class="more">查看更多</button>
<view class="like">热门推荐</view>
<card list="{{hotArr}}"></card>
<button class="more">查看更多</button>
</view>
</view>