118.【微信小程序 - 02】(二)

简介: 118.【微信小程序 - 02】
(3).properties属性 (父亲传数组给儿子)

在小程序组件中,properties是组件的对外属性,用来接受外界传递到组件的数据,实列实列代码如下

properties: {
    // 1. 第一种方式: 简化的方式->无法指定默认值
    // max:Number,   
    // 2. 第二种方式: 完整的定义方式 [当需要指定属性默认值时,建议使用此方式]
    max:{
      type:Number,  // 属性值的数据类型
      value:10  // 属性默认值
    }
  },

组件 test.js

// components/test/test.js
Component({
  // 隔离性
  options:{
    styleIsolation:'isolated'
  },
  /**
   * 组件的属性列表
   */
  properties: {
    // 1. 第一种方式: 简化的方式->无法指定默认值
    // max:Number,   
    // 2. 第二种方式: 完整的定义方式 [当需要指定属性默认值时,建议使用此方式]
    max:{
      type:Number,  // 属性值的数据类型
      value:10  // 属性默认值
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    count:0
  },
  /**
   * 组件的方法列表
   */
  methods: {
    // 1. 自增事件处理函数...
      addCount(){           
        if(this.data.count>=this.properties.max) return
        this.setData({
          count:this.data.count+1
        })
        this._showCount();
      },
      _showCount(){  // 2. 提示框的操作
        wx.showToast({
          title: '点击按钮:'+ this.data.count,
        })
      }
  }
})

父home.wxml

<!--pages/home/home.wxml-->
<text class="t1">首页</text>
<my-test1 max="4"></my-test1>

(4).data和properties的区别

在小程序的组件中,properties属性和data数据的用法相同、它们都是可读可写的,只不过:

  • data 更倾向于存储组件的私有数据。
  • properties 更倾向于存储外界传递到组件中的数据。
  • data和properties的引用地址时相同的…
(5).使用setData修改properties的值

由于data数据properties属性在本质上没有任何区别,因此properties属性的值也可以用于页面的渲染,或使用setData为properties中的属性重新赋值。

// components/test/test.js
Component({
  // 隔离性
  options:{
    styleIsolation:'isolated'
  },
  /**
   * 组件的属性列表
   */
  properties: {
    // 1. 第一种方式: 简化的方式->无法指定默认值
    // max:Number,   
    // 2. 第二种方式: 完整的定义方式 [当需要指定属性默认值时,建议使用此方式]
    max:{
      type:Number,  // 属性值的数据类型
      value:10  // 属性默认值
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    count:0
  },
  /**
   * 组件的方法列表
   */
  methods: {
    // 1. 自增事件处理函数...
      addCount(){           
        this.setData({
          count:this.data.count+1,
          max:this.properties.max+1
        })
        this._showCount();
      },
      _showCount(){  // 2. 提示框的操作
        wx.showToast({
          title: '点击按钮:'+ this.data.count,
        })
      }
  }
})

4.自定义组件- 数据监听器

(1).什么是数据监听器

数据监听器用途用于监听和响应任何数据字段的变化,从而执行特定的操作。它的作用类似于Vue中的watch侦听器。在小程序组件中。

(2).数据监听器的基本用法
1. 在components新建一个文件夹
2. 在这个新建的文件夹中引入compoents
3. 在app.json文件中配置注册 新建的这个组件
4. 在app.wxml文件中使用我们新建的这个组件

test2.js

初始化数据并设置监听的方法

/**
   *  组件的监听器-> 假如说监听的数据发生了变化,那么就会触发这个事件 
   */
  observers:{
    'n1,n2':function(newN1,newN2){  // 左边是监听的数据,右侧是方法(监听到的新值)
        this.setData({
          sum:newN2+newN1
        })
    }
  }
// components/test2/test2.js
Component({
  /**
   * 组件的初始数据
   */
  data: {
      n1:0,
      n2:0,
      sum:0
  },
  /**
   * 组件的方法列表
   */
  methods: {
    addN1(){
      this.setData({
        n1:this.data.n1+1
      })
    },
    addN2(){
      this.setData({
        n2:this.data.n2+1
      })
    }
  },
  /**
   *  组件的监听器-> 假如说监听的数据发生了变化,那么就会触发这个事件 
   */
  observers:{
    'n1,n2':function(newN1,newN2){  // 左边是监听的数据,右侧是方法(监听到的新值)
        this.setData({
          sum:newN2+newN1
        })
    }
  }
})

test2.wxml

<!--components/test2/test2.wxml-->
<view>
  {{n1}}+{{n2}}={{sum}}
</view>
<button bindtap="addN1">n1+1</button>
<button bindtap="addN2">n2+1</button>

(3).监听对象属性的变化

数据监听器支持监听对象中单个或多个属性的变化。

Component({
  obervers:{
    '对象.属性1,对象.属性2':function(新属性A的值,新属性B的值){
    // 事件触发的三种情况
      1. 属性A的值发生了变化
      2. 属性B的值发生了变化
      3. 直接为整个对象发生了变化
    }
}
})
(4).自定义监听器的 - 案列

注意点: 假如我们data区域的是对象。我们想要给对象里的某一个属性赋值:我们需要用单引号括起来

this.setData({
  '对象.属性名1': 
})

test3.js

// components/test3/test3.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
  },
  /**
   * 组件的初始数据
   */
  data: {
      rgb:{
        r:0,
        g:0,
        b:0
      },
      fullColor:'0,0,0'
  },
  observers:{
    'rgb.r,rgb.g,rgb.b':function(newR,newG,newB){
        this.setData({
            fullColor:newR+','+newG+','+newB
        })
    }
  },
  /**
   * 组件的方法列表
   */
  methods: {
    changeR(){
      if(this.data.rgb.r>255) return
      this.setData({
        'rgb.r':this.data.rgb.r+10
      })
    },
    changeG(){
      if(this.data.rgb.g>255) return
        this.setData({
          'rgb.g':this.data.rgb.g+10
      })
    },
    changeB(){
      if(this.data.rgb.b>255) return
      console.log()
          this.setData({
            'rgb.b':this.data.rgb.b+10
          })
  }
}
})

test3.wxml

<!--components/test3/test3.wxml-->
<view style="background-color: rgb({{fullColor}}); width: 100%;height: 300rpx">
</view>
<view>0
  背景颜色的RGB值为: {{fullColor}}
</view>
<view style="text-align: center;margin-top: 45rpx;">
  <button type="default" size="mini" bindtap="changeR">R</button>
<button type="primary" size="mini" bindtap="changeG">G</button>
<button type="warn" size="mini" bindtap="changeB">B</button>
</view>

(5).监听对象中所有属性的变化

如果某个对象中需要被监听的属性太多,为了方便,可以使用通配符 ** 来监听对象中的所有属性的变化:

我们在使用欸都时候,需要用到通配符和反引号

observers:{
    'rgb.**':function(obj){
        this.setData({
            fullColor:`${obj.r},${obj.g},${obj.b}`
        })
    }
  },


相关文章
|
Android开发
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
292 0
|
Web App开发 缓存 监控
Apollo插件:个性化你的开发流程
Apollo插件:个性化你的开发流程
|
12月前
|
机器学习/深度学习 人工智能 Python
MuCodec:清华、腾讯AI、港中文共同推出的超低比特率音乐编解码器
MuCodec是由清华大学深圳国际研究生院、腾讯AI实验室和香港中文大学联合开发的超低比特率音乐编解码器。它能够在0.35kbps至1.35kbps的比特率下实现高效的音乐压缩和高保真重建,适用于在线音乐流媒体服务、音乐下载、语言模型建设等多个应用场景。
276 1
MuCodec:清华、腾讯AI、港中文共同推出的超低比特率音乐编解码器
关于systemd自定义,一个service 启动多个实例
关于systemd自定义,一个service 启动多个实例
284 2
Shiro用户鉴权框架 子线程获取不到用户信息问题解决
Shiro用户鉴权框架 子线程获取不到用户信息问题解决
|
SQL Oracle 关系型数据库
SQL ALTER TABLE 语句- 灵活修改表结构和数据类型
SQL ALTER TABLE 语句用于在现有表中添加、删除或修改列,也可用于添加和删除各种约束。
658 0
|
关系型数据库 MySQL 数据安全/隐私保护
Windows环境下安装及配置MySQL
本文主要讲解在Windows环境下MySQL的安装、配置
8813 1
Windows环境下安装及配置MySQL
使用IDEA实现邮件发送
2、邮件发送 原理: 编写程序的四个核心类及程序流程: 需要的jar包: 简单QQ邮件(无附件)发送代码实现 //发送一封简单的邮件 public class MailDemo01 { public static void main(String[] args) throws Exception {
|
弹性计算 大数据 测试技术
2024年云服务器ECS价格表出炉——阿里云
2024年云服务器ECS价格表出炉——阿里云,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服务器30元3个月,幻兽帕鲁4核16G和8核32G服务器配置,云服务器ECS可以选择经济型e实例、通用算力u1实例、ECS计算型c7、通用型g7、c8i、g8i等企业级实例规格。阿里云百科分享阿里云服务器租用费用最新报价
457 2
|
存储 安全 数据建模
数据库——数据模型
数据库——数据模型
828 0
下一篇
开通oss服务