Flex 容器,弹性布局分为单行布局和多行布局,
名称 |
适合 |
参数 |
@Styles |
抽取 公共样式、事件 |
不可以传递参数 |
@Extend |
扩展 特定组件样式、事件 |
可以传递参数 |
@Builder |
抽取 结构、样式、事件 |
可以传递参数 |
可滚动的容器组件,当子组件的布局尺寸超过Scroll的尺寸时,内容可以滚动
// scrollEdge 返回顶部或者底部
this.scroller.scrollEdge(Edfe.Top)
this.scroller.scrollEdge(Edfe.Bottom)
// currentOffset() 获取页面滚动的距离
this.scroller.currentOffset().yOffset//y轴滚动距离
this.scroller.currentOffset().xOffset//x轴滚动距离
//滚动事件 页面滚动时触发
onScroll(()=>{})
通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。
@Entry
@Component
struct Index {
build() {
Tabs() {
TabContent() {
//内容区域只能有一个子组件
text('首页内容')
}
.tabBar('首页')//导航栏
}
}
}
Badge({
count:0,//0不显示 大于0显示
value: '0', //设置字符串 可以是数字 会都显示
position: BadgePosition.Right,//气泡的位置
style: {}
})
{
//单个子元素
}
1.创建一个新对象
2.函数内部的this指向这个对象
3.执行构造函数代码
4.返回新对象
是一种特殊的数据类型,约定变量只能在一组数据范围内选值
enum Color {
Red,
Green,
Blue
}
let selectedColor: Color = Color.Red;
枚举和常量枚举的区别:
编辑器识别不了类型,自己能识别就用 as 强制指定类型(自己不确定不要用!!!)
let Value : any = "10"
let Length: number = (Value as ).lngth
类型系统
TS: 变量类型不用提前定,写的快,适合小型项目,大型项目容易出类型错误。
ArkTS:静态类型,编译差错,用于大型鸿蒙应用保障数据交互
类和继承
TS:用“原型链”实现复用,简单场景好用,复杂的继承关系不好管理。
ArkTS:类、接口更严谨,大型应用扩展起来更方便。
装饰器
TS:装饰器还在实验阶段,用起来受限
ArkTS:已经成熟,用来配置鸿蒙组件的
模块系统
TS:很麻烦,模块规范多,不同环境要选不同规范
ArkTS:直接用ES6的规范+鸿蒙自己规定的规范,效率更高
应用开发语法
TS:通过操作网页DOM元素实现交互,这种适合传统网页开发
ArkTS:用声明式语法构建UI(直接定义界面结构),开发鸿蒙应用更快更简单
通过状态驱动视图更新
一套代码能跑手机、平板、手表、电视等设备。
通过自适应布局,自动适配不同屏幕大小,开发者不用为每个设备单独写布 局代码。
优化渲染引擎让界面滑动更流畅,提供统一的设计规范组件库,保证多端一致。还支持JavaScript/TS/Java等多语言开发,还能自定义组件插件,方便扩展功能。
通过线性容器 Row 和 Column 构建,Row容器内的子元素按照水平方向排列,Column容器内的子元素按照垂直方向排列。根据不同的排列方向,开发者可以选择合适的容器创建线性布局。
主轴:justifyContent()
.start : 默认,组件靠左或靠上排列
.end : 组件靠右/下排列
.center : 组件居中排列
.space-between : 两端对齐,中间间距均分
space-around : 每个组件左右/上下间距相等
交叉轴:alignltems()
.start : 顶部对齐
.end :底部对齐
.center : 垂直居中
.stretch : 组件拉伸填满交叉轴空间
弹性布局分为单行布局和多行布局。默认情况下,Flex 容器中的子元素都排在一条线上。子元素尺寸总和大于 Flex 容器尺寸时,子元素尺寸会自动挤压。
wrap 属性控制当子元素主轴尺寸之和大于容器主轴尺寸时,Flex是单行布局还是多行布局。在多行布局中自动换行
Flex更适合复杂布局,Column/Row用于线性布局,简单布局。
绝对定位:position , 相对父组件左上角进行偏移,不占位置
相对定位:
层叠布局通过Stack 容器组件实现位置的固定定位与层叠,容器中的子元素后一个覆盖前一个子元素。
通过 alignContent 来设置子组件的位置
场景:图片上叠加文字标签
按钮右上角显示未读消息红点
弹窗浮层覆盖背景
Column / Row / Flex / Stack / List / Grid / Swiper / Tabs /Popup
名称 |
适合 |
参数 |
@Styles |
抽取 公共样式、事件(只能在页面全局内使用,不能export) |
不可以传递参数 |
@Extend |
扩展 特定组件样式(不能在@Component组件内部使用)、事件 |
可以传递参数 |
@Builder |
抽取 结构、样式、事件 |
可以传递参数 |
系统组件
onAppear:当组件出现在屏幕上时触发
onDisAppear: 当组件从屏幕消失时候触发
自定义组件(未被Entry修饰的组件)
AboutToAPPear: 组件即将展示 场景:进行预加载或初始化
AboutToDisappear: 组件即将消失触发 用处:清理数据
AboutToReuse :组件即将被复用 用处:
自定义组件(被Entry修饰)
onPageShow: 页面展示时触发
onPageHide: 页面隐藏时触发
onBackPress:返回操作时触发
父传子(单向)
使用 @Prop 装饰器。子组件接收只读属性,父组件更新子组件同步更新。
子传父
@Link:双向数据绑定,子组件可以修改父组件状态。
跨层级通讯
使用@Provide 和 @Consume。祖先组件用 @Provide 提供数据,后代组件用 @Consume接收。
23、如何在ArkTS中实现应用级状态管理?
AppStorage:
跨页面,跨UIAbility状态共享
通过@StorageLink 和 @StorageProp 实现双向/单向同步
LocalStorage:
页面级状态管理,适用于同一页面内多组件共享状态
通过@LocalStorageLink 和 @LocalStoragePrp绑定
24、说一说数组常用的API
push()-在数组末尾加上一个或多个元素
pop()-删除数组的最后一个元素,并返回那个元素
shify()-删除数组的第一个元素,并返回那个元素
unshift()-在数组的开始添加一个或多个元素,并返回新的长度
slice()-返回数组的一个浅拷贝
splice() -通过删除现有元素和/或添加新元素来更改一个数组的内容
concat()-链接两个或多个数组,返回一个新数组
join()-将数组中的所有元素转换为一个字符串
reverse()-颠倒数组中元素的顺序
sort()-对数组的元素进行排序
forEach()-遍历数组中的每个元素并执行回调函数
map()-创建一个新数组,其包含通过所提供函数实现的测试的所有元素
reduce()-对数组中的每个元素执行一个由您提供的reducer函数
reduceRight()-对数组中的每个元素执行一个有您提供的reducer函数
25、typeof 与 instanceof 的区别
作用不同
typeof 用于判断基本数据类型,对于对象类型只能判断“object”无法区分对象类型。
instanceof 判断对象是不是某个构造函数或类的实例
返回值不同
typeof 返回字符串
instanceof 返回布尔值,原型链
联合类型表示一个值可以是多种类型中的一种,而交叉类型表示一个新类型,他包含了多个类型的特性。
特性 |
AppStorage |
PersistentStorage |
数据存储位置 |
内存 |
设备本地存储 |
生命周期 |
应用进程存在期间 |
持久化(跨应用启动) |
数据共享范围 |
应用内全局 |
应用内全局(但需通过AppStorage访问) |
持久化能力 |
否 |
是(自动同步) |
典型使用场景 |
临时状态、页面间参数传递 |
用户配置、登录状态等需要保留的数据 |