微信小程序组件的使用

今天学习了微信小程序的组件化开发,发现和vue是挺像的,为了让自己的思路更加的清晰,我将把思路写下来
在创建组件之前我们需要知道什么是子组件,什么是父组件,子组件其实就是我们自己定义的组件,比如这里我们自己定义了一个tabs组件,那么这个就是子组件,父组件就是我们使用子组件的这个就是父组件

1、首先我们要创建一个组件,这里我创建了一个tabs组件
在微信开发者工具里面创建一个新得
2、创建了之后需要在子组件的js里定义一下它的属性

properties: {
    tabs:{
      type:Array,
      value:[]
    }
  },

然后再把它的样式写一下

<view class="tabs">
    <view class="tabs_title">
        <view class="title_item {{item.isActive?'active':''}}"
            wx:for="{{tabs}}"
            wx:key="id"
            bindtap="handleItemTap"
            data-index="{{index}}"
        >{{item.value}}</view>
    </view>
    <view class="tabs_content">
        <slot></slot>
    </view>
</view>

css:

/* components/Tabs/Tabs.wxss */
.tabs{}
.tabs_title{
    display: flex;
    
}
.title_item{
    display: flex;
    justify-content: center;
    align-items: center;
    flex: 1;
    padding: 15rpx 0;
}
.active{
    color: var(--themeColor);
    border-bottom: 5rpx solid currentColor;
}
.tabs_content{}

之后我们需要在父组件先引入这个子组件
我们找到父组件的json,然后将子组件引入进去

"usingComponents": {
    "SearchInput":"../../components/SearchInput/SearchInput",
    "Tabs":"../../components/Tabs/Tabs"
  },

之后就需要在父组件进行修饰拉
tabs我们定义成了一个数组,然后里面有value这个属性,但是没有写具体的值是什么,这个值就会写在父组件的js里,我们将这个值写在data里面

 data: {
    tabs : [
      {
        id:0,
        value:"综合",
        isActive:true
      },
      {
        id:1,
        value:"销量",
        isActive:false
      },
      {
        id:2,
        value:"价格",
        isActive:false
      }
    ]

但是我们需要有一个切换tab栏的效果,所以这个时候再回到我们的子组件,给他写一个方法,这个方法是我们自己命名的而且我们需要将它传回给父组件
所以找到子组件的wxml,给他绑定一个方法
在这里插入图片描述
然后再在js里面讲一个新的方法传给父组件

 methods: {
      handleItemTap(e) {
        const {index} = e.currentTarget.dataset;
        this.triggerEvent("tabsItemChange",{index})
      }
  }

然后再父组件里进行绑定:
在这里插入图片描述
最后再是在父组件的js里写这个方法:

handleTabsItemChange(e){
    const {index} = e.detail;
    let {tabs} = this.data;
    tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false);
    this.setData({
      tabs
    })
  },

此时就差最后一步了,就是将我们的slot写进去
所以在我们父组件的wxml里写上block并给它写上wx:if

 <block wx:if="{{tabs[0].isActive}}">0</block>
    <block wx:if="{{tabs[1].isActive}}">1</block>    
    <block wx:if="{{tabs[2].isActive}}">2</block>

这样一个tap栏的小demo就实现拉

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值