首页 > 编程语言 >小程序自定义组件 - 数据方法与属性

小程序自定义组件 - 数据方法与属性

时间:2023-04-08 22:24:44浏览次数:64  
标签:count cj 自定义 max 组件 data properties 属性

这块在组件中的定义和使用, 同 vue 是大致相同的. 在小程序组件中定义在 .js 的 Component ( ) 中即可.

data 和 methods

小程序中, 组件数据要定义在 data 中, 而事件处理函数和自定义方法都定义在 methods 中. 以一个页面点击 + 1 的例子作为演示: (还是之前的 cj 组件)

组件结构部分:

<!--components/cj/cj.wxml-->

<button bindtap="addCount">+1</button>

组件逻辑部分:

// components/cj/cj.js
Component({
  data: {
    count: 0
  },
  methods: {
    // 点击事件处理函数
    addCount() {
      this.setData({
        count: this.data.count + 1
      })

      this._showCount()
    },
    // 自定义方法
    _showCount() {
      wx.showToast({
        title: "count 是: " + this.data.count 
      })
    }
  }
})


这样当在页面的 "+1" 按钮点击时, 触发 tap 事件所对应的 addCount 函数, 在组件 .js 的 methods 节点中, 该函数将通过 this.data.count 获取到了组件 data 中的 count 值, 并将其自增1后, 通过 this.setData({ }) 函数重新给 count 进行赋值;

然后再调用下面自定义的 _showCount( ) 方法, 它的作用就简单将 count 的值给显示出来. 就这整个过程, 我可以说完全是抄袭 vue 的, 不过也挺好, 学一边都会了哈哈哈.

properties 属性

在小程序组件中, properties 是组件的对外属性, 用来接收外界传递到组件中的数据. 就类似于 vue 中的 prop, 父组件通过 v-bind:name="value" 给子组件传值, 子组件通过 props: ['name'] 进行接收. 但在小程序中则更简单和便于理解一些.

参照上例, 假设我们要通过在 index 主页面中, 通过 prop 的方式给 cj 组件传递一个名为 max 的数值型属性, 使其自增到 max 后, 就不能再继续了.

组件结构部分:

<!--components/cj/cj.wxml-->

<!-- 假设增加到 max = 10 就停止 -->
<button max=10 bindtap="addCount">+1</button>

组件逻辑部分:

// components/cj/cj.js
Component({

  properties: {
    max: {
      type: Number,
      value: 10
    }
  },

  data: {
    count: 0
  },

  methods: {
    // 点击事件处理函数
    addCount() {

      // 判断外界通过属性传递过来的 max 的值
      if (this.data.count >= this.properties.max) return 

      this.setData({
        count: this.data.count + 1
      })

      this._showCount()
    },
    // 自定义方法
    _showCount() {
      wx.showToast({
        title: "count 是: " + this.data.count 
      })
    }
  }
})


data 和 properties 的区别

在 vue 中, data 是组件的私有数据, prop 是外部传递给组件的数据. data 可读可写, prop 只能读 (单项数据流).

而在小程序中, data 和 properties 都是可读可写的, 就有点狗了. 但实际效果却和 vue 一样的. 建议 data 存私有数据, 而 properties 存储外界传进来的数据. 我想说, 你要抄作业就全抄不好嘛, 笑死.

接上例来演示通过这两种方式 传递的是数据, 其实是一样的.

组件结构部分:

<!--components/cj/cj.wxml-->

<button max="10" bindtap="addCount">+1</button>
<button bindtap="showInfo">showInfo</button>

组件逻辑部分:

// components/cj/cj.js
Component({

  properties: {
    max: {
      type: Number,
      value: 10
    }
  },

  data: {
    count: 0
  },

  methods: {
    // 点击事件处理函数
    addCount() {

      // 判断外界通过属性传递过来的 max 的值
      if (this.data.count >= this.properties.max) return 

      this.setData({
        count: this.data.count + 1
      })

      this._showCount()
    },
    // 自定义方法
    _showCount() {
      wx.showToast({
        title: "count 是: " + this.data.count 
      })
    },
    // 验证一下
    showInfo() {
      console.log(this.properties)
      console.log(this.data)
      console.log('它们全等嘛: ', this.properties === this.data)
    }
  }
})

然后我点击了两下, 控制台显示如下:

{count:2, max:10}
{count:2, max:10}
它们全等嘛:  true

由此可看出 data 数据 和 properties 属性 在本质上没有任何区别, 即 properties 的值也能用于页面的渲染, 或者使用 setData( ) 给 properties 进行重新赋值哦.

<view>max 属性的当前值是: {{max}}</view>
methods: {
// 点击事件处理函数
addCount() {
    this.setData({
      // 属性 和 数据 都能被修改, 这操作有病...
      count: this.data.count + 1,
      max: this.properties.max +1
})

},

这俩一样的,就都行吧, 喜欢用啥就用啥吧.

标签:count,cj,自定义,max,组件,data,properties,属性
From: https://www.cnblogs.com/chenjieyouge/p/17299400.html

相关文章

  • 自定义序列化器类
    @Serialization是一个自定义装饰器,通常用于序列化Python对象。使用@Serialization装饰器可以将一个类转换为可序列化的对象,这样就可以将其存储到文件或通过网络传输。下面是一个使用@Serialization装饰器的示例:importjsondefSerialization(cls):defserializ......
  • 小程序自定义组件 - 创建与引用
    简单理解组件即"页面的一部分".组件化开发也更多是为了代码复用,方便管理和提高开发效率.前端的组件化开发我想大抵也是借鉴后端开发思想吧.从前端的实现来看,以vue为例即通过扩展自定义HTML标签的的形式,让其局部拥有"单文件"的功能(包括了模板,样式,逻辑).然后组......
  • 记录-VueJs中如何使用Teleport组件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助了解排序算法的优缺点和适用场景是非常重要的,因为在实际开发中,需要根据实际情况选择最合适的排序算法。不同的排序算法适用于不同的场景,有的算法适用于小规模的数据集,有的算法适用于大规模的数据集,有的算法适用于......
  • Jmeter参数化的方式-用户参数、用户自定义变量、CSV文件设置、函数助手
    一、jmeter的主要功能参数化:事先准备好数据,脚本执行时从准备好的数据中取值;可将脚本中的某些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则;在脚本运行时,根据需要选取不同的参数值作为输入,该方式成为数据驱动测试(DataDrivernTest,DDT),参数的取值范围称为数据池(Data......
  • Python 进阶指南(编程轻松进阶):十七、Python 风格 OOP:属性和魔术方法
    原文:http://inventwithpython.com/beyond/chapter17.html很多语言都有OOP特性,但是Python有一些独特的OOP特性,包括属性和魔术方法。学习如何使用这些Python风格技巧可以帮助您编写简洁易读的代码。属性允许您在每次读取、修改或删除对象的属性时运行一些特定的代码,以......
  • .net core 自定义规范响应的中间件
    在本文中,我们将介绍如何使用.NETCore中的中间件来自定义规范响应,以便在API调用时返回统一的格式和错误信息。中间件是一种可以在请求和响应管道中执行逻辑的软件组件,它可以对请求或响应进行修改、拦截或处理。我们将使用一个简单的示例来演示如何创建和使用自定义规范响应的......
  • 自定义线程池详解
    自定义线程池ThreadPoolExecutorexecutor=newThreadPoolExecutor(5,10,200,TimeUnit.MILLISECONDS, newArrayBlockingQueue<Runnable>(5));第一个参数:核心线程池大小,默认创建后就不会销毁,需要设置allowCoreThreadTimeOut为true时会销毁第二个参数:线程池最大大......
  • 内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
    原文:https://blog.csdn.net/yyzsyx/article/details/129576582文章目录一、篇头二、内核部分2.1源码下载2.1.1官网2.1.2镜像站点2.1.3代码下载2.2编译2.2.1设置工具链2.2.2配置2.2.3make2.2.4编译成功三、busybox部分3.1源码下载3.2编译3.2.1配置3.2.3编译3.2.4查......
  • Vue进阶(四十九):在Webapp上使用input:file, 指定capture属性调用默认相机,摄像,录音功能
    在webapp上使用input:file,指定capture属性调用默许相机,摄像,录音功能。在webapp上使用input:file,指定capture属性调用默认相机,摄像,录音功能在iOS6下开发webapp,使用input之file,很有用<inputtype="file"accept="image/*"capture="camera"><inputtype="file"acce......
  • 盒子模型常用属性
    盒⼦的位置和⼤⼩尺寸宽度width:⻓度|百分⽐|auto⾼度height边界marginpadding上右下左|上下左右padding与marginpadding:10px10px10px10px//上左下右padding:5px10px //上下边距5px、左右边距10pxpadding:5px10px20px//上边距左右边距下边距p......