首页 > 其他分享 >【HarmonyOS】ArkUI中this指向的坑

【HarmonyOS】ArkUI中this指向的坑

时间:2024-03-04 16:12:32浏览次数:27  
标签:ArkTS 指向 编译 适配 语法 HarmonyOS V2 bind ArkUI

​【关键字】

this指向,.bind(this),TS到ArkTS的适配

 

随着HarmonyOS Previewer版本的发布,笔者也是立马鸟枪换炮,想试一试鸿蒙的新特性,新功能。结果刚把老的工程代码导入,工程就无法编译了,让我们来看看是哪里报了错:

cke_9972.png​​

bind方法居然不支持了。要知道在Api9的HarmonyOS开发过程中,我们如果需要用成员函数或者匿名函数给组件配置事件时,是需要用bind方法确保函数体内的this指向正确的组件。那么现在bind方法不支持了我们该如何确保呢?让我们来看一下官方文档:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-declarative-ui-description-0000001630425053-V2#ZH-CN_TOPIC_0000001711186904__%E9%85%8D%E7%BD%AE%E4%BA%8B%E4%BB%B6

 

根据官方文档中的表述,配置事件的方式现在有了以下的变化:

1.使用匿名函数配置事件,不支持用function声明的方式进行配置,现在只支持“()=>{......}”的方式进行声明配置。

2.使用匿名函数和使用成员函数配置,都不再需要用bind方法来绑定this了,现在会自动绑定所属的组件

 

看来官方是为了简化我们的代码,提高代码的可读性,优化了这部分的逻辑。

那么就有人要问,如果我确实需要动态改变函数内的this指向,应该如何实现呢?官方也给了我们解决的方案:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-more-cases-0000001674820386-V2#ZH-CN_TOPIC_0000001711186500__arkts-no-typing-with-this

 

原始代码:

cke_1516.png

1.可以使用类的方法实现

cke_2476.png

2.将this作为参数传入

cke_3691.png

3.将属性作为参数传入

cke_5158.png

那么肯定也还有人会问,我们项目里用到的地方那么多,一个个改多麻烦。官方在兼容性方面也给了我们解答:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V2/arkts-migration-background-0000001722779509-V2

在API version 10之前,ArkTS(.ets文件)完全采用了标准TS的语法。从API version 10 Release起,ArkTS的语法规则基于上述设计考虑进行了明确定义,同时,SDK增加了在编译流程中对.ets文件的ArkTS语法检查,通过编译告警或编译失败提示开发者适配新的ArkTS语法。

根据工程的compatibleSdkVersion,具体策略如下:

  • compatibleSdkVersion >= 10 为标准模式。在该模式下,对.ets文件,违反ArkTS语法规则的代码会导致工程编译失败,需要完全适配ArkTS语法后方可编译成功。
  • compatibleSdkVersion < 10 为兼容模式。在该模式下,对.ets文件,以warning形式提示违反ArkTS语法规则的所有代码。尽管违反ArkTS语法规则的工程在兼容模式下仍可编译成功,但是需要完全适配ArkTS语法后方可在标准模式下编译成功。

cke_6857.png

这样相关的地方就只会告警而不会影响编译,不过为了代码的美观性和可读性,还是建议各位小伙伴适配哦。

标签:ArkTS,指向,编译,适配,语法,HarmonyOS,V2,bind,ArkUI
From: https://www.cnblogs.com/mayism123/p/18052018

相关文章

  • 【HarmonyOS】Button按钮设置带有渐变色的背景图片无效
    ​【关键字】Button、渐变色、背景图片、backgroundImage 【问题描述】在为Button组件设置背景图片时未生效,这里准备的背景图片是渐变色的,当在代码中设置完成之后,发现按钮并没有像预想的那样变成渐变色,代码如下:​效果是这样的:​这也太奇怪了,难道是Button按钮的背景图片不......
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit
    1.问题描述实时验证和非实时验证的区别是什么?解决方案相同点:“手机号快速验证”和“实时验证”都是为了向用户发起获取手机号信息的请求。最终目的都是为了获取到手机号。这两种获取方式都需要完成“获取您的手机号”的Scope权限申请。区别:实时验证手机号:每次调用都会拉起授......
  • C++ 指向类的指针
    原文一个指向C++类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,在使用指针之前,对指针进行初始化。在C++中,指向类的指针指向一个类的对象,与普通的指针相似,指向类的指针可以用于访问对象的成员......
  • 【HarmonyOS】如何读取rawfile里面的自定义文件
    ​【关键词】rawfile、getRawFileContent、textDecoder 【背景】我们知道rawfile文件夹内可以自由放置各类资源文件,如html、json等,那么我们在页面中如何解析引用我们自定义的这些文件呢?这篇文章将为大家揭开谜底~ 【实现方法】我们可以通过@ohos.resourceManager(资源管理......
  • 【HarmonyOS】一招教你在竖屏的UIAbility中使用横屏页面
    ​【关键字】鸿蒙应用开发、ArkTS、UIAbility、横屏页面显示 1、写在前面我们在实际的项目开发过程中,可能会遇到这样的需求:在一个手机应用中,A页面是竖屏展示的,点击A页面的某个按钮需要跳转到B页面,但是B页面需要横屏展示,比如查看海报或者表格信息等内容,在HarmonyOS中,在不增加......
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit
    1.问题描述升级到4.0.0.59版本后,通过pushService.getToken获取华为的token时报如下错误:Illegalapplicationidentity.解决方案Mate40Pro(NOH)从4.0升级到4.1版本后,会出现UDID变化,影响历史的调试签名使用,应用重新签名后即可正常运行。2.问题描述按照https://developer.h......
  • JAVA基础:数组在计算机中的执行原理 多个变量指向一个数组
    程序都是在计算机中的内存中执行的,java程序编译之后会产生一个class文件,这个class文件是提取到内存中的JVM虚拟机中执行的。java为了便于虚拟机这个java程序,也即这个class文件。将虚拟机这块内存区域进行了划分:方法区,栈,堆,  本地方法栈,程序计数器方法区:放编译后的class文件的......
  • this指向详解
    JavaScript中的this是一个关键字,它在不同的情况下会指向不同的值。this的取值是在函数(非箭头函数)被调用时确定的,而不是在函数被定义时确定的。1.全局上下文中:在全局上下文中,this 指向全局对象,在浏览器中通常是 window 对象。console.log(this)//window 2.函数中......
  • 【HarmonyOS开发】案例-签名板基础上开发移动白板
    【HarmonyOS开发】案例-签名板基础上开发移动白板:https://mp.weixin.qq.com/s?__biz=MzI0MzQ5NTgxOQ==&mid=2247485266&idx=1&sn=15b550a8141cff0572ae828e8c75cd41&chksm=e96d61b6de1ae8a0963f7eafb47b04a654594b9d04415443a4b85904b5ed0adaaae1480adec5&mpshare=1&sc......
  • HarmonyOS—添加/删除Module
    Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用/服务通常会包含一个或多个Module,因此,可以在工程中创建多个Module,每个Module分为Ability和Library两种类型。在工程中添加Module......