24. 自定义组件

2023-08-19 15:46:22发布
38

这里的组件和vue的组件的概念是一样的

创建组件步骤

1. 在根目录新建一个component的文件夹(不一定名字要叫component),然后在里面新建一个myHeader的文件夹,然后在myHeader的文件夹下,右键-新建Component

组件的文件和pages下是一样的,依然是有js、json、wxml和wxss


2. 在app.json或者在页面中的.json文件中,注册组件。规则是如果这个组件是很多页面或者每个页面都用到的,则在app.json中注册,否则就在页面中的.json文件中注册


3. 使用组件

<view>
  <myHeader />
</view>

这里的myHeader对应第2步的名字


父子组件传值

这里的传值基本和vue一样

父传子

父传递数据

<view>
  <myHeader title="{{ title }}" />
</view>
Page({
  data: {
    title: '这是header的title'
  }
})

子接收数据

<text>{{ title }}</text>
Component({
  properties: {
    title: {
      type:String,
      value: "默认标题"
    }
  }
})

子传父

子发送数据

Component({
  data: {
    info: {
      name: 'tom',
      age: 13
    }
  },
  lifetimes: {
    ready() {
      this.triggerEvent('sendinfo', this.data.info) // 和vue的this.$emit类似
    }
  }
})

父接受数据

<view>
  <myHeader bindsendinfo="getInfo"/>
</view>
Page({
  getInfo(info) {
    console.log(info.detail) // detail字段就是子组件发送过来的info数据
  }
})


selectComponent

类似vue的ref,组件定义一个ref,然后用$refs.子组件.方法的方式来调用子组件的方法

例子

index.wxml

<view>
  <!--给组件定义一个类名,也可以是id-->
  <my-test class="mytest"/>
</view>

index.js

Page({
  onLoad() {
    const mytest = this.selectComponent('.mytest'); // 对应组件的类名或者id名
    mytest.say(); // 调用mytest的say方法
  }
})

mytest.js

Component({
  methods: {
    say() {
      console.log('say hello');
    }
  }
})