小程序自定义组件

2021-03-23  本文已影响0人  云之一

1、组件声明

页面json文件--usingComponents属性

//页面json文件
{
  "usingComponents": {
    "Tabs":"../../components/tabs/tabs"
  }
}

2、父子组件传值

<!--父页面wxml-->
<Tabs tabs="{{tabs}}" bindtabChange="handleTabChange">
  <view wx:if="{{tabs[0].isActive}}">11111111111</view>
  <view wx:if="{{tabs[1].isActive}}">22222222222</view>
  <view wx:if="{{tabs[2].isActive}}">33333333333</view>
  <view wx:if="{{tabs[3].isActive}}">44444444444</view>
</Tabs>
// 父js
Page({
  data: {
    tabs:[
      {
        id:0,
        name:'首页',
        isActive:false
      },
      {
        id:0,
        name:'原创',
        isActive:true
      },
      {
        id:0,
        name:'分类',
        isActive:false
      },
      {
        id:0,
        name:'关于',
        isActive:false
      } ,
    ]
  },
  handleTabChange(e){
    const index = e.detail
    let {tabs} = this.data
    tabs.forEach((tab,i)=>i===index?tab.isActive=true:tab.isActive=false)
    this.setData({
      tabs
    })
    console.log(this.data.tabs)
  }
})
<!--子组件wxml-->
<view>
  <view class="title">
      <view class="tab_item {{tab.isActive?'active':''}}" 
          wx:for="{{tabs}}" 
          wx:key="id" 
          wx:for-index="index" 
          wx:for-item="tab"
          bindtap="tabSwitch"
          data-index="{{index}}">
          {{tab.name}}
      </view>
  </view>
  <view>
    <slot></slot>
  </view>
</view>
//子组件js
Component({
  properties: {
    tabs:{
      type:Array,
      value:[]
    }
  },
  methods: {
    tabSwitch(e){
      const {index} = e.target.dataset
      this.triggerEvent("tabChange",index)
    }
  }
})

tips

上一篇 下一篇

猜你喜欢

热点阅读