鸿蒙HarmonyOS4.0开发应用学习笔记

这篇具有很好参考价值的文章主要介绍了鸿蒙HarmonyOS4.0开发应用学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

黑马程序员鸿蒙4.0视频学习笔记,供自己回顾使用。

1.安装开发工具DevEco Studio

鸿蒙harmony开发文档指南

DevEco Studio下载地址
鸿蒙 array,harmonyos,学习,笔记
选择或者安装环境
鸿蒙 array,harmonyos,学习,笔记
选择和下载SDK
鸿蒙 array,harmonyos,学习,笔记
鸿蒙 array,harmonyos,学习,笔记
安装总览
鸿蒙 array,harmonyos,学习,笔记
编辑器界面
鸿蒙 array,harmonyos,学习,笔记

2.TypeScript语法

2.1变量声明

//string 、number、boolean、any、union、Object、Array
let s: string = 'hello world'
const ss: string = 'hello world'//const 代表常量
//any,个人不建议使用,代码量庞大后导致代码逻辑混乱
let a:any = '不确定类型,可能是任意类型'
//union
let u:string|number|boolean = '联合类型,可能是其中一种'
//Object,对象类型
let car = {brand:'问界',Price:199999}
console.log(car.brand)
console.log(car['brand'])
//Array:数组
let cars: Array<string> = ['问界','阿维塔']
let price: number[] = [199999,299999]
console.log(cars[0])
console.log(price[1])

2.2条件控制

//在TypeScript中,空字符串、数字0、null、undefined都被认为是false,其它值则为true
//if-else,写吐了不想写
if(){}else{}
if(){}else if(){}else{}
//switch
let season:string = '冬天'
switch(season){
	case '春天':{
		console.log('你的笑容那么美,恰好与春风撞了个满怀')
		break
	}
	case '夏天':{
		console.log('玫瑰到了花期,我很想你')
		break
	}
	case '秋天':{
		console.log('盛夏欠你的温柔,让秋风徐徐来还。')
		break
	}
	default{
		console.log('情话是学的,但爱你是真的')
		break
	}
}

2.3循环迭代

//for
for(let i = 0;i<100;i++){
	console.log('拥有'+i+'个男(女)模对象')
}
// for-in
let cars: string[] = ['问界','阿维塔']
for(const i in cars){
	console.log(cars[i])
}
//for-of
for(const car of cars){
	console.log(car)
}
//while
let i = 1;
while(i <= 100){
	console.log('拥有'+i+'个男(女)模对象')
	i++;
}

2.4函数

//无返回值
function func1(car:string):void{
	console.log(car)
}
fun1('问界')
//有返回值
function func2(x: number,y:number):number{
	return x+y 
}
let count = func2(1,1)
console.log('1+1=3?'+'1+1='+count)
//简写版,箭头函数
let func3 = (car:string) => {
	console.log(car)
}
func3('阿维塔')
//函数可选参数
function func4(car?:string){
	car = car?car:'哦莫'
	console.log(car)
}
func4()
func4('link')
//函数可选参数,提供默认值
function func5(car:string='哦莫'){
	console.log(car)
}
func5()
func5('link')

2.5类和接口

//定义枚举
enum GamesConsole{
	SWITCH:1999,
	PS5:2999,
	XBOXONE:2999
}
//定义接口,抽象方法接受枚举参数
interface Price{
	//类和对象里的函数不需要加function
	showPS5Price(price:GamesConsole):void
}
//实现接口
class Article implements Price{
	showPS5Price(price:GamesConsole):void{
		console.log('ps5的价格是:'+price)
	}
}
//初始化对象
let p:Price = new Article()
//调用方法,传递枚举参数
p.showPrice(GamesConsole.PS5)
//父类
class Rectangle{
	//成员变量
	private width:number
	private length:number
	//构造函数
	constructor(width:number,length:number){
		this.width=width
		this.length=length
	}
	//成员方法
	public area():number{
		return this.width * this.length
	}
}
//子类
class Square extends Rectangle{
	constructor(side:number){
		//调用父类构造
		super(side,side)
	}
}

let s = new Square(10)
console.log(s.area())

2.6模块开发

通用功能抽取到单独的ts文件,每个文件都是一个模块(module)。
模块可以相互加载,提高代码复用性。

//rectangle.ts
//定义类,通过export导出
export class Rectangle{
	//成员变量
	private width:number
	private length:number
	//构造函数
	constructor(width:number,length:number){
		this.width=width
		this.length=length
	}
}
//定义工具方法,通过export导出
export function area(rec:Rectangle):number{
	return rec.width * rec.length
}
//index.ts
//通过import导入,from后面写文件的地址
import {Rectangle,area} from '../rectangle'

//创建Rectangle对象
let r = new Rectangle(10,10)

//调用area方法
console.log('面积为:'+area(r))

3.快速入门-hello world

create project -> empty ability
鸿蒙 array,harmonyos,学习,笔记
Index.ets文件解读

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            //...处理事件
            if (this.message == 'Hello World') {
 				this.message = '你好 世界'
            }else {
            	this.message = 'Hello World'
            }

          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

鸿蒙 array,harmonyos,学习,笔记

4.ArkUI组件

4.1Image组件

Image:图片显示组件

1.声明Image组件并设置图片源:

Image(src: string|PixelMap|Resource)

① string格式,通常用来加载网络图片,需要申请网络访问权限: ohos.permission.INTERNET

Image('https://xxx . png' )

② PixelMap格式,可以加载像素图,常用在图片编辑中

Image(PixelMapObeject)

③ Resource格式,加载本地图片,推荐使用

Image($r('app.media.mate60'))
Image($rawfile('mate60.png'))

2.添加图片属性

Image($r('app .media.icon'))
	.width(100) //宽度
	.height(120) //高度
	.borderRadius(10) // 边框圆角
	.interpolation(ImageInterpolation.High) // 图片插值

4.2Text组件

Text:文本显示组件
1.声明Text组件并设置文本内容

Text(content?:string|Resource)

①string格式,直接填写文本内容

Text('今天天气很好呀!')

②Resource格式,读取本地资源文件

Text($r('app.string.hello'))

2。添加文本属性

Text('注册账号')
	.lineHeight(32) // 行高
	.fontSize(20) // 字体大小
	.fontColor('#ff1876f8') // 字体颜色
	.fontWeight(FontWeight.Medium) // 字体粗细

4.3TextInput组件

TextInput:文本输入框
1.声明TextInput组件

TextInput( {placeholder?: ResourceStr,text?: ResourceStr})

①placeHoder:输入框无输入时的提示文本

TextInput([placeholder:'请输入账号或手机号'})

②text: 输入框当前的文本内容

TextInput({text: '1234567890'})

2.添加属性和事件

TextInput({text:当前输入文本)
	.width(150) //宽
	.height(30) // 高
	.backgroundColor('#FFF') // 背景色
	.type(InputType.Password)//输入框类型
	.onChange(value=>{
		//value是用户输入的文本内容
	})
名称 描述
Normal 基本输入模式。支持输入数字、字母、下划线、空格、特殊字符。
Password 密码输入模式。支持输入数字、字母、下划线、空格、特殊字符。
Email 邮箱地址输入模式。支持数字,字母,下划线,以及@字符。
Number 纯数字输入模式。
PhoneNumber9+ 电话号码输入模式。支持输入数字、+、-、*、#,长度不限。

4.4 Button组件

Button:按钮组件
1.声明Button组件,label是按钮文字:

Button(label?:ResourceStr)

① 文字型按钮

Button('点我')

② 自定义按钮,在Button内嵌套其它组件

Button(){
	Image($r('app.media.search')).width(20).margin(10)
}

2.添加属性和事件

Button('点我')
	.width(100)
	.height(30)
	.type(ButtonType.Normal)//按钮类型
	.onclick(()=>{
		//处理点击事件
	})

4.5 Slider组件

Slider:滑动条组件

Slider(options?:SliderOptions)
Slider({
	min:0,//最小值
	max:100,//最大值
	value:30,//当前值
	step:10,//滑动步长
	style:SliderStyle.OutSet,//Inset
	direction:Axis.Horizontal,//Vertical
	reverse:false//是否反向滑动
})
	.width('90%')
	.showTips(true)//是否展示value百分比提示
	.blockColor('#36D')
	.onChangge(value=>{
		//value就是当前滑块值
	})

4.6 Column和Row

属性方法名 说明 参数
justifyContent 设置子元素在主轴方向的对其格式 FlexAlign枚举
alignItems 设置子元素在交叉轴方向的对其格式 Row容器使用VerticalAlign枚举
alignItems 设置子元素在交叉轴方向的对其格式 Column容器使用HorizontalAlign枚举
FlexAlign枚举:
	FlexAlign.Start
	FlexAlign.Center
	FlexAlign.End
	FlexAlign.SpaceBetween
	FlexAlign.SpaceAround
	FlexAlign.SpaceEvenly

鸿蒙 array,harmonyos,学习,笔记

HorizontalAlign枚举:
	HorizontalAlign.Start
	HorizontalAlign.Center
	HorizontalAlign.End

鸿蒙 array,harmonyos,学习,笔记

VerticalAlign枚举:
	VerticalAlign.start
	VerticalAlign.Center
	VerticalAlign.End

鸿蒙 array,harmonyos,学习,笔记

4.7 循环控制

  • ForEach
  • if-else
    鸿蒙 array,harmonyos,学习,笔记

4.8 List

列表(List)是一种复杂容器,具备以下特点:
① 列表项(ListItem)数量过多超出屏幕后,会自动提供滚动功能
②列表项(ListItem)既可以纵向排列,也可以横向排列

List({space:10}){
  ForEach([1,2,3,4],item => {
    ListItem(){
      //列表项内容,只能包含一个根组件
      Text('ListItem')
    }
  })
}
.width('100%')

4.9 自定义组件

  • 创建自定义组件
  • @Buider
  • @Styles

@Buider
鸿蒙 array,harmonyos,学习,笔记
@style
鸿蒙 array,harmonyos,学习,笔记
@Extend不仅可以写特有属性方法还可以写事件方法

5.ArkUI-状态管理

5.1@State装饰器

在声明式UI中,是以状态驱动视图更新:
鸿蒙 array,harmonyos,学习,笔记
状态(state):指驱动视图更新的数据(被装饰器标记的变量)
视图(View):基于UI描述渲染得到用户界面

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
      Text(this.message)
      .onClick(()=>{
        this.message == 'Hello World'?this.message = '你好 世界':this.message = 'Hello World'
      })
  }
  
}
说明:
@State装饰器标记的变量必须初始化,不能为空值。
@State支持Object、class、string、number、boolean、enum类型已经这些类型的数组。
嵌套类型以及数组中的对象属性无法触发视图更新。

如果做过vue开发应该很好理解。

下个目录所需要的案例

// 任务类
class Task{
  static id:number = 1
  // 任务名称
  name:string  = `任务${Task.id++}`
  // 任务状态:是否完成
  finished:boolean = false
}
// 统一的卡片样式
@Styles function  card(){
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius:6,color:'#1F000000',offsetX:2,offsetY:4})
}
// 任务完成样式
@Extend(Text) function finishedTask(){
  .decoration({type:TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}


@Entry
@Component
struct PropPage {
  @State message: string = 'Hello World'
  // 总任务数量
  @State totalTask:number = 0
  // 已完成任务数量
  @State finishTask:number = 0
  // 任务数组
  @State tasks:Task[] = []

  handleTaskChange(){
    // 更新任务总数量
    this.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.finishTask = this.tasks.filter(item => item.finished).length
  }

  build() {
    Column({space:10}) {
      // 任务进度卡片
      Row(){
        Text('任务进度:')
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
        // 层叠容器
        Stack(){
          Progress({
            value:this.finishTask,
            total:this.totalTask,
            type:ProgressType.Ring
          })
            .width(100)
          Row(){
            Text(this.finishTask.toString())
              .fontColor('#36D')
              .fontSize(24)
            Text(' / '+this.totalTask.toString())
              .fontSize(24)
          }
        }

      }
      .card()
      .margin({top:20,bottom:10})
      .justifyContent(FlexAlign.SpaceEvenly)
      // 新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(()=>{
          this.tasks.push(new Task())
          // 更新任务总数量
          // this.totalTask = this.tasks.length
          this.handleTaskChange()
        })
      // 任务列表

      // 任务列表List版本
      List({space:10}){
        ForEach(
          this.tasks,
          (item:Task,index) =>{
            ListItem(){
              Row(){
                Text(item.name)
                  .fontSize(20)
                Checkbox()
                  .select(item.finished)
                  .onChange(val=>{
                    // 更新当前任务状态
                    item.finished = val
                    // 更新已完成任务数量
                    // this.finishTask = this.tasks.filter(item => item.finished).length
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end:this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .alignListItem(ListItemAlign.Center)
      .layoutWeight(1)
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }

  @Builder DeleteButton(index: number){
    Button(){
      Image($r('app.media.ic_public_delete_filled'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(()=>{
      this.tasks.splice(index,1)
      this.handleTaskChange()
    })
  }
}

5.2 @Prop和@Link

状态管理
当父子组件之间需要数据同步时,可以使用@Prop和@Link装饰器:

@Prop @Link
同步类型 单向同步 双向同步
允许修饰的变量类型 1. @Prop只支持string、number、boolean、enum类型 。2.父组件对象类型,子组件对象属性。3.不可以是数组、any 1.父子类型一致:string、number、boolean、enum、object、class,以及他们的数组。2.数组中元素增、删、替换会引起刷新。 3.嵌套类型以及数组中的对象属性无法触发视图更新
初始化方式 不允许子组件初始化 父组件传递,禁止子组件初始化

鸿蒙 array,harmonyos,学习,笔记

// 任务类
class Task{
  static id:number = 1
  // 任务名称
  name:string  = `任务${Task.id++}`
  // 任务状态:是否完成
  finished:boolean = false
}
// 统一的卡片样式
@Styles function  card(){
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius:6,color:'#1F000000',offsetX:2,offsetY:4})
}
// 任务完成样式
@Extend(Text) function finishedTask(){
  .decoration({type:TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}


@Entry
@Component
struct PropPage {
  @State message: string = 'Hello World'
  // 总任务数量
  @State totalTask:number = 0
  // 已完成任务数量
  @State finishTask:number = 0




  build() {
    Column({space:10}) {

      // 任务进度卡片
      TaskStatistics({finishTask:this.finishTask,totalTask:this.totalTask})

      // 任务列表
      TaskList({finishTask:$finishTask,totalTask:$totalTask})


    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }


}


@Component
struct TaskStatistics {
  @Prop finishTask:number
  @Prop totalTask:number


  build(){
    Row(){
      Text('任务进度:')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
      // 层叠容器
      Stack(){
        Progress({
          value:this.finishTask,
          total:this.totalTask,
          type:ProgressType.Ring
        })
          .width(100)
        Row(){
          Text(this.finishTask.toString())
            .fontColor('#36D')
            .fontSize(24)
          Text(' / '+this.totalTask.toString())
            .fontSize(24)
        }
      }

    }
    .card()
    .margin({top:20,bottom:10})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}


@Component
struct TaskList {

  @Link finishTask:number
  @Link totalTask:number
  // 任务数组
  @State tasks:Task[] = []
  handleTaskChange(){
    // 更新任务总数量
    this.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.finishTask = this.tasks.filter(item => item.finished).length
  }
  build(){
    Column(){
      // 新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(()=>{
          this.tasks.push(new Task())
          // 更新任务总数量
          // this.totalTask = this.tasks.length
          this.handleTaskChange()
        }).margin({bottom:10})

      // 任务列表List版本
      List({space:10}){
        ForEach(
          this.tasks,
          (item:Task,index) =>{
            ListItem(){
              Row(){
                Text(item.name)
                  .fontSize(20)
                Checkbox()
                  .select(item.finished)
                  .onChange(val=>{
                    // 更新当前任务状态
                    item.finished = val
                    // 更新已完成任务数量
                    // this.finishTask = this.tasks.filter(item => item.finished).length
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end:this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .alignListItem(ListItemAlign.Center)
      .layoutWeight(1)
    }
  }

  @Builder DeleteButton(index: number){
    Button(){
      Image($r('app.media.ic_public_delete_filled'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(()=>{
      this.tasks.splice(index,1)
      this.handleTaskChange()
    })
  }
}

5.3 @Provide和@Consume

@Provide和Consume可以跨组件提供类似于@State和@Link的双向同步
鸿蒙 array,harmonyos,学习,笔记

// 任务类
class Task{
  static id:number = 1
  // 任务名称
  name:string  = `任务${Task.id++}`
  // 任务状态:是否完成
  finished:boolean = false
}
// 统一的卡片样式
@Styles function  card(){
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius:6,color:'#1F000000',offsetX:2,offsetY:4})
}
// 任务完成样式
@Extend(Text) function finishedTask(){
  .decoration({type:TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}

statInfo{
  // 总任务数量
  totalTask:number = 0
  // 已完成任务数量
  finishTask:number = 0

}

@Entry
@Component
struct PropPage {
	//统计信息
	@Provide state:StatInfo = new StatInfo()


  build() {
    Column({space:10}) {

      // 任务进度卡片
      TaskStatistics()//直接不需要传参

      // 任务列表
      TaskList()//直接不需要传参


    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }


}


@Component
struct TaskStatistics {
  @Consume stat: StatInfo


  build(){
    Row(){
      Text('任务进度:')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
      // 层叠容器
      Stack(){
        Progress({
          value:this.StatInfo.finishTask,
          total:this.StatInfo.totalTask,
          type:ProgressType.Ring
        })
          .width(100)
        Row(){
          Text(this.finishTask.toString())
            .fontColor('#36D')
            .fontSize(24)
          Text(' / '+this.totalTask.toString())
            .fontSize(24)
        }
      }

    }
    .card()
    .margin({top:20,bottom:10})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}


@Component
struct TaskList {

  @Consume stat: StatInfo
  // 任务数组
  @State tasks:Task[] = []
  handleTaskChange(){
    // 更新任务总数量
    this.StatInfo.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.StatInfo.finishTask = this.tasks.filter(item => item.finished).length
  }
  build(){
    Column(){
      // 新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(()=>{
          this.tasks.push(new Task())
          // 更新任务总数量
          // this.totalTask = this.tasks.length
          this.handleTaskChange()
        }).margin({bottom:10})

      // 任务列表List版本
      List({space:10}){
        ForEach(
          this.tasks,
          (item:Task,index) =>{
            ListItem(){
              Row(){
                Text(item.name)
                  .fontSize(20)
                Checkbox()
                  .select(item.finished)
                  .onChange(val=>{
                    // 更新当前任务状态
                    item.finished = val
                    // 更新已完成任务数量
                    // this.finishTask = this.tasks.filter(item => item.finished).length
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end:this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .alignListItem(ListItemAlign.Center)
      .layoutWeight(1)
    }
  }

  @Builder DeleteButton(index: number){
    Button(){
      Image($r('app.media.ic_public_delete_filled'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(()=>{
      this.tasks.splice(index,1)
      this.handleTaskChange()
    })
  }
}

5.4 @Observed和@ObjectLink

@ObjectLink和@Observed装饰器用于在涉及嵌套对象或数组元素为对象的场景中进行双向数据同步

6.页面路由

页面路由是指在应用程序中实现不同页面之间的跳转和数据传递。
  • 页面栈的最大容量上限为32个页面,使用router.clear()方法可以清空页面栈,释放内存。
  • Router有两种页面跳转模式,分别是:
模式 作用
router.pushUrl() 目标页不会替换当前页,而是压入页面栈,因此可以用router.back()返回当前页
router.replaceUrl() 目标页替换当前页,当前页会被销毁并释放资源,无法返回当前页
  • Router有两种页面实例模式,分别是:
模式 作用
Standard 标准实例模式。每次跳转都会新建一个目标页并压入栈顶。默认模式。
single 单实例模式。如果目标页已经存在栈中,则离栈顶最近的相同Url页面会被移动到栈顶并重新加载

使用步骤
1.导入组件,Router模块:

import router from '@ohos.router';

2.利用router实现跳转、返回等操作:文章来源地址https://www.toymoban.com/news/detail-767658.html

//跳转到指定路径,并传递参数
router.pushUrl(
	{
		url:'pages/ImagePage',//目标页面路径
		params:{id:1}//传递参数(可选)
	},
	router.RouterMode.Single,//页面模式:RouterMode枚举
	err => {
		if(err){
			//异常响应回调函数,错误码err.code:
			//100001:内部错误,可能是渲染失败
			//100002:路由地址错误
			//100003:路由栈中页面超过32
			console.log('路由失败.')
		}
	}
)

//获取传递过来的参数
params: any = router.getParams()

//返回上一页
router.back()

//返回到指定页,并携带参数
router.back(
	{
		url:'pages/Index',
		params:{id:10}
	}
)

到了这里,关于鸿蒙HarmonyOS4.0开发应用学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙应用开发学习路线(OpenHarmony/HarmonyOS)

    作者:坚果 团队:坚果派 公众号:“大前端之旅” 润开鸿技术专家,华为HDE,InfoQ签约作者,OpenHarmony布道师,擅长HarmonyOS应用开发、熟悉服务卡片开发,在“战码先锋”活动中作为大队长,累计培养三个小队长,带领100+队员完成Pr的提交合入。 欢迎通过主页或者私信联系

    2024年02月15日
    浏览(91)
  • 鸿蒙 HarmonyOS4.0 Http数据请求封装详解

    步骤 1、定义响应数据格式 2、封装数据请求 3、将各种请求进行模块划分 4、请求示例 项目目录 1、定义响应数据格式 2、封装数据请求 提示:具体更详细的配置请参考官网 3、将各种请求进行模块划分 熟悉vue开发的同学都知道我们不同模块的请求一般放在api目录下进行划分

    2024年02月04日
    浏览(74)
  • HarmonyOS4.0从零开始的开发教程12给您的应用添加弹窗

    在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种模态窗口,通常用来展示用户当前需要的或用户必须关注的信息或操作。在弹出框消失之前,用户无法操作其他

    2024年02月04日
    浏览(44)
  • 全面升级:华为鸿蒙HarmonyOS4正式发布,玩趣个性化,小艺AI升级

    8月4日新闻,今天下午,华为正式发布了最新版本的鸿蒙操作系统——HarmonyOS 4! 在华为发布会上,鸿蒙HarmonyOS迎来了一系列令人激动的功能升级。其中包括个性化空间、多种生产力工具以及增强的手机AI助手\\\"小艺\\\"。这次更新使得鸿蒙手机系统呈现出全新的特色。让我们一起

    2024年02月13日
    浏览(50)
  • 鸿蒙(HarmonyOS)应用开发指南

    1.1 简介 鸿蒙 (即 HarmonyOS ,开发代号 Ark ,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的 分布式操作系统 。该系统利用“分布式”技术将 手机、电脑、平板、电视、汽车和智能穿戴 等多款设备

    2024年02月02日
    浏览(104)
  • HarmonyOS 鸿蒙应用开发(十一、面向鸿蒙开发的JavaScript基础)

    ArkTS 是HarmonyOS(鸿蒙操作系统)原生应用开发的首选语言。它是用于构建用户界面的一种TypeScript方言,扩展了TypeScript以适应HarmonyOS生态系统的UI开发需求。ArkTS 融合了TypeScript的静态类型系统和现代UI框架的设计理念,为开发者提供了一种更安全高效的方式来编写HarmonyOS应用。

    2024年02月20日
    浏览(56)
  • HarmonyOS 应用开发学习笔记 状态管理概述

    移动端开发,最重要的一点就是数据的处理,并且正确的显示渲染UI。 变量在页面和组件、组件和组件之间有时候并不能实时共享,而有时候,又不需要太多的作用域(节省资源),作用就需要根据不同场景,设置不同状态的变量。 官方文档 在声明式UI编程框架中,UI是程序

    2024年02月03日
    浏览(49)
  • 【HarmonyOS】开发一个可以看小姐姐的鸿蒙应用 鸿蒙开发入门

    先整张效果图,丑点是丑点,但可以用,买不起鸿蒙系统手机的我,只配用虚拟机。 要说目前最火的手机操作系统,要我来看的话那必然是鸿蒙无疑。16号刚刚结束了第五次鸿蒙内测,在看到这次的内测名单之后,居然有970的机器,这是不是说明俺这手里奋战了三年的荣耀

    2024年02月15日
    浏览(94)
  • 鸿蒙应用开发尝鲜:初识HarmonyOS

    来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在TypeScript(简称TS)基础上的拓展,而TS又是JavaScrip

    2024年02月02日
    浏览(65)
  • 鸿蒙HarmonyOS应用开发初体验

    最近华为发布mt60新机火了,作为一名移动开发程序员,对鸿蒙系统开发移动端就很感兴趣了。 开发工具:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 下载完后按默认安装就可以了,界面跟AS很类似,之前我jdk环境配置就不在配置了,不懂的可以百度下很多教程。 这是基

    2024年02月09日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包