properties

微信小程序可以已通过组件的 properties 属性来给自定义组件传递数据

接收任意类型数据

当我们在使用properties的时候,可以不给属性设置数据类型,那么这个属性就可以接收任意类型的数据

示例1

<view>
  我是自定义及组件 {{message}}
</view>
// components/mt-component/mt-component.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
      message: ''
  }
})

引用组件的wxml文件

<view class="container">
  <!-- 给子组件传字符串 -->
  <mt-component message="HELLO"></mt-component>
  <!-- 给子组件传数字 -->
  <mt-component message="{{123}}"></mt-component>
  <!-- 给子组件传布尔类型数据-->
  <mt-component message="{{true}}"></mt-component>
  <!-- 给子组件传布尔类型数据-->
  <mt-component message="{{false}}"></mt-component>
  <!-- 给子组件传undefined和null值-->
  <mt-component message="{{undefined}}"></mt-component>
  <mt-component message="{{null}}"></mt-component>
  <!-- 给子组件传对象-->
  <mt-component message="{{user}}"></mt-component>
</view>

接收指定类型的数据

有些时候,我们需要指定子组件从父组件接收的数据的类型.因此就需要再设置属性的时候,要给属性设置一个type属性

示例2

根据示例1,我们将 子组件的message属性改成以下形式

// components/mt-component/mt-component.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
      message: {
        type: String
      }
  }
})

在父组件引用的代码也和示例1 一样

<view class="container">
  <!-- 给子组件传字符串 -->
  <mt-component message="HELLO"></mt-component>
  <!-- 给子组件传数字 -->
  <mt-component message="{{123}}"></mt-component>
  <!-- 给子组件传布尔类型数据-->
  <mt-component message="{{true}}"></mt-component>
  <!-- 给子组件传布尔类型数据-->
  <mt-component message="{{false}}"></mt-component>
  <!-- 给子组件传undefined和null值-->
  <mt-component message="{{undefined}}"></mt-component>
  <mt-component message="{{null}}"></mt-component>
  <!-- 给子组件传对象-->
  <mt-component message="{{user}}"></mt-component>
</view>

从小程序的渲染结果来看好像差别不大,但是我们去调试控制台里看看,就会发现相应的警告

"message" of "components/mt-component/mt-component" received type-uncompatible value: 
expected <String> but get null value. Use empty string instead.

"message" of "components/mt-component/mt-component" received type-uncompatible value: 
expected <String> but got object-typed value. Force converted.

以上两个警告分别表示: 
1. message想要接收的数据类型是String(字符串)类型,
但是收到的是 null值,小程序自动将这个值用 空字符串来代替

2. message想要接收的数据类型是String(字符串)类型,
但是收到的是 对象类型的数据

默认值

在使用子组件的时候,如果我们没有给组件传递相关的数据,我们可以考虑给该组件设置相应的默认值

  • 设置子组件的properties
// components/mt-component/mt-component.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
      message: {
        type: String,
        value: ''
      },
      age: {
        type: Number,
        value: 0
      },
      user: {
        type: Object,
        value: {}
      },
      list: {
        type: Array,
        value: []
      }
  }
})
  • 设置子组件的wxml
<view>
  我是自定义及组件 {{message}} 
  用户信息 {{user.name}} 
  年龄: {{age}} 
  <view wx:for="{{list}}">
    {{item}}
  </view>
</view>
  • 父组件js里的data
 data: {
    message: "hello 小程序",
    show: true,
    user: {
      name:'zmt'
    },
    list: ["html","css","js"]
  },
  • 父组件的wxml文件
<view class="container">
  <!-- 给子组件传字符串 -->
  <mt-component message="HELLO"></mt-component>
  <!-- 给子组件传数字 -->
  <mt-component message="{{123}}"></mt-component>
  <!-- 给子组件传对象-->
  <mt-component user="{{user}}"></mt-component>
  <!-- 给子组件传递数组 -->
  <mt-component list="{{list}}"></mt-component>
</view>

results matching ""

    No results matching ""