赞
踩
目录
声明式UI就是一种编写用户界面的范式或方式、
ArArkTS 在继承了Typescript语法的基础上,主要扩展了声明式UI开发相关的能力。
声明式UI开发范式大致流程:定义页面状态、描述页面效果、改变状态
1、定义页面状态
分析和定义页面的各种状态,声明状态变量表示不同的状态。如显示开灯关灯状态
@State isOn:boolean =false; //默认关灯
@State 表示是状态变量,只有状态变量修改,页面才会更新。
2、描述界面显示效果
描述界面在不同状态下的显示效果,如开灯效果和关灯效果
关灯显示关灯照片
开灯显示开灯照片
3、改变状态
点击按钮改变状态,如开灯状态和关灯状态
点击关灯isOn:boolean =false,显示关灯照片
点击开灯isOn:boolean =true ,显示开灯照片
-
- @Entry
- @Component
- struct LightPage {
- @State isOn: boolean = false;
- build() {
- Column({ space: 20 }) {
- if (this.isOn) {
- Image('pages/helloworld/light/solution/images/img_light.png')
- .height(300)
- .width(300)
- .borderRadius(20)
- } else {
- Image('pages/helloworld/light/solution/images/img_dark.png')
- .height(300)
- .width(300)
- .borderRadius(20)
- }
- Row({ space: 50 }) {
- Button('关灯')
- .onClick(() => {
- this.isOn = false
- })
- Button('开灯')
- .onClick(() => {
- this.isOn = true;
- })
- }
- }
- .height('100%')
- .width('100%')
- .justifyContent(FlexAlign.Center)
- }
- }
1、声明式组件
组件由 组件名称、组件参数、组件属性方法、组件事件方法、子组件组成。
组件名称(组件参数){ 子组件 }.组件属性方法().组件属性方法().组件事件方法
============================================================
- 组件 Button
-
- Button({ type: ButtonType.Circle }) {
- 子组件
- Image('pages/light/images/img_light.png')
- .width(25)
- .height(25)
- }
- .witdh(50)
- .height(50)
- .backgroundColor(Color.Red)
- .onclick(() => {
- console.log('创建组件 onclick 测试');
- })
组件案例
===============================================================
- @Entry
- @Component
- struct Index {
- @State isOn: boolean = false;
- @State isDel: boolean = false;
-
- build() {
- Column({ space: 10 }) {
- if (this.isDel) {
- Image('pages/delete/images/man.jpg').width(300).height(300);
- } else {
- Image('pages/delete/images/girl.jpg').width(300).height(300);
- }
- Row({ space: 20 }) {
- Button('还原')
- .onClick(() => {
- this.isDel = false;
- });
- Button() {
- Image('pages/delete/images/ic_delete.png')
- .width(25).height(25)
- }
- .type(ButtonType.Circle)
- .width(50).height(50).backgroundColor(Color.Red)
- .onClick(() => {
- this.isDel = true;
- });
- }
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
-
- }
- }
2、自定义组件
提高代码复用性
@Component 装饰器:装饰 struct 关键字声明的数据结构
@Entry 装饰器:标识该组件为组件树的根节点,也就是一个页面入口组件
struct:ArkTS用于自定义组件或者自定义定义弹窗的关键字,与结构类相似
build() build() 用于声明自定义组件的UI结构
组件属性:定义组件的属性
自定义组件案例
============================================================
SwitchButton.ets文件:
- @Component
- export struct SwitchButton {
- color: Color = Color.Blue
-
- build() {
- Button() {
- Image('pages/on_off/images/icon_switch.png')
- .width(25).height(25)
- }
- .type(ButtonType.Circle)
- .width(50)
- .height(50)
- .backgroundColor(this.color)
- }
- }
============================================================
on_off.etc文件:
- import { SwitchButton } from './SwitchButton';
- @Entry
- @Component
- struct on_off {
- @State isOn: boolean = false;
- @State isDel: boolean = false;
-
- build() {
- Column({ space: 30 }) {
- if (this.isDel) {
- Image('pages/on_off/images/man.jpg').width(300).height(300);
- } else {
- Image('pages/on_off/images/girl.jpg').width(300).height(300);
- }
- Row({ space: 30 }) {
- SwitchButton({ color: Color.Green })
- .onClick(() => {
- this.isDel = false;
- });
-
- SwitchButton({ color: Color.Red })
- .onClick(() => {
- this.isDel = true;
- });
- }
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
-
- }
- }
if...else 和 Foreach循环
if...else案例 =========================================================================
PlayButton.ets文件:
---------------------
- @Component
- export struct PlayButton {
- color: Color = Color.White;
- isShow: boolean = true;
- build() {
- Button() {
- Image('pages/condition/images/' + (this.isShow ? "ic_play.png" : "ic_pause.png"))
- .width(50).height(50)
- }
- .width(100)
- .height(100)
- .backgroundColor(this.color)
- }
- }
paly.ets文件:
---------------------
- import { PlayButton } from './playButton';
-
- @Entry
- @Component
- struct Play {
- @State isRunning: boolean = true;
-
- build() {
- Column({ space: 10 }) {
- if (this.isRunning) {
- Image('pages/condition/images/girl.jpg').width(300).height(300);
- } else {
- Image('pages/condition/images/man.jpg').width(300).height(300);
- }
-
- Row() {
- if (this.isRunning) {
- PlayButton({ isShow: this.isRunning })
- .onClick(() => {
- this.isRunning = false;
- })
- }else {
- PlayButton({ isShow: this.isRunning })
- .onClick(() => {
- this.isRunning = true;
- })
- }
- }
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
Foreach循环案例
=======================================================================================
FruitButton.ets文件:
---------------------
- @Component
- export struct PlayButton {
- color: Color = Color.White;
- isShow: boolean = true;
- build() {
- Button() {
- Image('pages/condition/images/' + (this.isShow ? "ic_play.png" : "ic_pause.png"))
- .width(50).height(50)
- }
- .width(100)
- .height(100)
- .backgroundColor(this.color)
- }
- }
fruit.ets文件:
---------------------
- import { PlayButton } from './playButton';
-
- @Entry
- @Component
- struct Fruit {
- @State options: string[] = ['桃子', '苹果', '香蕉', '香梨', '荔枝'];
- @State answer: string = '_______?';
- @State color: Color = Color.Black;
- @State fontSize: number = 25;
-
- build() {
- Column({ space: 23 }) {
- Row({ space: 15 }) {
- Text('你最喜欢的水果是')
- .fontColor(Color.Black)
- .fontSize(25)
- .fontWeight(FontWeight.Bold)
- Text(this.answer)
- .fontColor(this.color)
- .fontSize(this.fontSize)
- .fontWeight(FontWeight.Bold)
- }
-
- ForEach(this.options, (item: string) => {
- Column({ space: 40 }) {
- Button(item)
- .fontSize(32)
- .width(180)
- .height(90)
- .backgroundColor(Color.Orange)
- .onClick(() => {
- this.answer = item;
- this.color = Color.Red;
- this.fontSize=44;
- })
- }
-
- })
- }
- .width('100%')
- .height("100%")
- .justifyContent(FlexAlign.Center)
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。