当前位置:网站首页>#夏日挑战赛#【FFH】JS自定义组件:DIY一个随点随用的键盘!(一)
#夏日挑战赛#【FFH】JS自定义组件:DIY一个随点随用的键盘!(一)
2022-07-28 17:03:00 【51CTO】
ArkUI自定义组件实战开发:如何快速拥有一个私人定制的软键盘?
前言
平时在Devco Studio调试代码的过程中经常需要输入的操作,像一些根据用户输入来处理数据的模块,然而相信不少的开发伙伴们都苦于预览器previewer中没有自带的输入法键盘,要么运行真机模拟器,要么自己在代码中初始化数据,不太自由和方便。
因此,在看完文档的自定义组件开发后,我决定写一个类似输入法键盘的自定义组件,随点随用。
这个夏天,我要实现输入自由!(来自前端开发人的高呼)
官方文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-custom-basic-usage-0000001281361086
效果展示

代码实现
代码结构
编写自定义组件的事件
理论解释:
liteKeyboard.js代码中,自定义组件接口会提供三个基本的接口函数:
data(){}
props:{}
computed(){}
这里只需使用data和props,(computed用于数据预处理,详情可以去官方文档看)
props
自定义组件可以通过props声明属性,父组件通过设置属性向子组件传递参数,props支持类型包括:String,Number,Boolean,Array,Object,Function。
有两种书写方式
第一种的方式可以给props规定的属性设置默认值(通过关键词default)
props使用演示
liteKeyboard.js
index.hml
这里的is-valid属性即是上面设置的isValid,is-valid的值将作为参数传递给isValid
注意: 驼峰命名法的 prop 名,在外部父组件传递参数时需要使用短横线分隔命名形式,即当属性isValid在父组件引用时需要转换为is-value。
data
类似pages页面的data:{},功能除了初始化hml绑定的数据,还可以用来接收父组件(即调用它的组件)的参数
因为自定义组件的数据是单向性的(父传子),子组件即liteKeyboard.js不能直接修改父组件传来的值
引用官方文档:
数据单向性*
父子组件之间数据的传递是单向的,只能从父组件传递给子组件,子组件不能直接修改父组件传递下来的值,可以将props传入的值用data接收后作为默认值,再对data的值进行修改。
data使用演示:
除了这三个基本接口,自己也可以自定义事件绑定
通过 this.$emit(‘绑定的函数名’, params:参数) 绑定
liteKeyboard.js
index.js
index.hml
理论结束,实战开始
大体思路:
对于数字键盘点击输入的数字用字符数组存储,点击事件触发时将字符数组作为参数text传递,再index.js用e.detail.text获取,并在自定义事件中与把所有需要输入的文本框数据进行绑定。
先写好键盘的样式
对于这种规则的宫格布局,采用grid来布局是不错的方法
liteKeyboard.hml
liteKeyboard.css
编写响应事件
liteKeyboard.js
父组件界面(配合dialog弹窗食用更佳!)
index.hml
为了体现自定义组件特性和丰富liteKeyboard的功能,我加入了props属性:is-valid来根据实际是否需要对输入数据进行合法性检查,默认值为false不需要,这在对于一些规定数据类型为Number的场景比如金额输入很适用,相当于实现了像手机输入法的一些功能。当然,我们还可以借助props、computed来DIY更多的功能,充分开发自定义组件的特性,做出更高级的键盘。
待改进
上面编写的键盘不太实用,仅限绑定一个数据(即只能绑定一个文本输入框),如何应用到我们平时在previewer多数据输入场景的调试当中?那就需要加入更多的自定义组件特性功能,所以在下篇中进行了代码的改进:
总结
至此,一个属于你自己、随点随用的DIY键盘就诞生了。
总而言之,自定义组件的使用体验和封装效果很不错,耦合性可以有效的减少,对于前端UI的开发来说确实方便不少。当然,这次实战只是一个对自定义组件强大功能的简单试探,希望以后能用它创造出更丰富好用的组件!
边栏推荐
- Digital filter (IV) -- converting analog filter into digital filter
- 横向listview的最佳实现——RecycleView
- 如何简简单单地自己动手磨刀
- Openmv (VI) -- STM32 realizes object recognition and handwritten digit recognition
- Power adapter global definition
- TCP/IP详细图解
- 这么多开源框架,该用哪个好?
- Experience 5 minutes to develop wechat apps
- Tcp/ip detailed diagram
- USB Type-C 详解
猜你喜欢
![[reading notes] for paper: summary of three papers in r-cnn series](/img/1d/8b862ac66ea04d9371f64e35fc4396.png)
[reading notes] for paper: summary of three papers in r-cnn series

云容器与云原生

WordPress prompt error in establishing database connection

ADS仿真 之 直流仿真示例

横向listview的最佳实现——RecycleView

Flutter:异常处理

天线的主要参数介绍

Introduction to USB type-C PD fast charging

Digital filter (III) -- Design of analog filter

Digital filter (II) -- minimum phase delay system and all pass system
随机推荐
Tips -- understanding of the physical meaning of convolution
VSC上写Go出现expected ‘package‘, found ‘EOF‘
Cloud container and cloud native
[dry goods] how to establish a close relationship between support and products?
低码在数字化转型中扮演什么角色?
Mysql操作大全
Video Number Xiaobai starting operation guide
solidity的require报错
2023年网络安全预算规划的五个关键考虑因素
马斯克利用活猪展示全新脑机接口技术:可实时读取猪脑信息
solidity转账函数的实现(基于transfer)
LeetCode79题 方法一:深度搜索
Busybox latest version (busybox APK)
Functions brought by the binding of official account and video Number
[reading notes] - 2 learn machine learning classification through naive Bayesian model
WordPress prompt error in establishing database connection
The video number is more like a official account of version 2.0
Application of Internet of things in smart city
DC-DC开关电源
MongoDB创建索引