小程序的组件>微信小程序组件通信=>父传子,子传父,组件生命周期,slot

收藏

微信小程序组件

Component({

  properties: {
    myProperty: { // 属性名
      type: String,
      value: ''
    },
    myProperty2: String // 简化的定义方式
  },
  
  data: {}, // 私有数据,可用于模板渲染

  lifetimes: {
    created() {
    	// 在组件实例刚刚被创建时执行
    },
    attached() {
    	// 在组件实例进入页面节点树时执行
    },
    ready() {
    	// 在组件在视图层布局完成后执行
    },
    moved() {
    	// 在组件实例被移动到节点树另一个位置时执行
    },
    detached() {
    	// 在组件实例被从页面节点树移除时执行
    },
  },

  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show() { },
    hide() { },
    resize() { },
  },

  methods: {
    onMyButtonTap: function(){
      this.setData({
        // 更新属性和数据的方法与更新页面数据的方法类似
      })
    },
    // 内部方法建议以下划线开头
    _myPrivateMethod: function(){
      // 这里将 data.A[0].B 设为 'myPrivateData'
      this.setData({
        'A[0].B': 'myPrivateData'
      })
    },
    _propertyChange: function(newVal, oldVal) {

    }
  }
})

微信小程序组件通信

index.json

{
  "usingComponents": {
    "van-icon": "@vant/weapp/icon/index",
    "position": "../../components/position/position",
    "van-action-sheet": "@vant/weapp/action-sheet/index"
  },
  "enablePullDownRefresh": true,
  "backgroundTextStyle": "dark",
  "onReachBottomDistance": 100
}

index.wxml

<position wx:for="{{list}}" wx:key="id" item="{{item}}" bind:clickMore="onMore"></position>
<van-action-sheet
  show="{{ showMore }}"
  actions="{{ moreActions }}"
  bind:close="onClose"
  bind:select="onSelect"
  cancel-text="取消"
  bind:cancel="onClose"
/>

index.js

onMore(data) {
    const moreActions = [
      {
        name: data.detail.position,
        color: '#999'
      },
      {
        name: "导航"
      },
      {
        name: data.detail.address
      }
    ];
    this.setData({
      showMore: true,
      moreActions: moreActions
    })
  },
  onClose() {
    this.setData({ showMore: false });
  },
  onSelect(e) {
    console.log(e)
  }

 position.js

onMore() {
      this.triggerEvent("clickMore", this.data.item)
}

-----------------基础版-------------------------------

 https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html 

父组件

<navBar 
list="{{checkList}}" ---------------------------------------------------------------->父传子
current="{{current}}" 
bindparentEvent="handleparentEvent"//------------------------------------------------>子传父
></navBar>
<swiper bindchange="handleChange" current="{{current}}">
  <swiper-item wx:for="{{checkList}}" wx:key="index">
    {{item.name}}
  </swiper-item>
</swiper>
Page({
  data: {
    current:0,
    checkList:[
      {
        id:1,
        name:'小神龙',
        price:20,
        checked:false
      },
      {
        id:2,
        name:'动力',
        price:10,
        checked:false
      },
      {
        id:3,
        name:'心累累',
        price:90,
        checked:false
      }
    ]
  },
  onLoad() {
  },
  handleCheck(evt){

    this.data.checkList[evt.target.dataset.index].checked=!this.data.checkList[evt.target.dataset.index].checked
    this.setData({
      checkList:[...this.data.checkList]
    })

  },
  handleChange(evt){
    this.setData({
      current:evt.detail.current
    })
  },
  handleparentEvent(evt){//--------------------------------------------------------------------------->子传父
    this.setData({
      current:evt.detail
    })
  }
})

子组件

<text wx:for="{{list}}" wx:key="index" class="{{current==index?'active':''}}" data-index="{{index}}" bindtap="handleClick">
{{item.name}}
</text>
Component({

  properties: {
    list:Array,
    current:Number
  },


  methods: {
    handleClick(evt){
      this.triggerEvent('parentEvent',evt.currentTarget.dataset.index)------------------------>子传父
    }
  }
})

*插槽*

子组件

<view>
<slot name='left'></slot>
components/slot/slot.wxml
<slot name='right'></slot>
</view>
<--js文件中-->
options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
},

<slotL>
<button slot='left'>left</button>
<view slot='right'>right</view>
</slotL>


评论(

您还未登录,请先去登录
表情
查看更多

相关作者

  • 获取点赞0
  • 文章阅读量264

相关文章

联系小鹿线

咨询老师

咨询老师

扫码下载APP