10-模块化语法与自定义组件

一.模块化语法

1.模块化基本认知

1)简介:

模块化:把一个大的程序,【拆分】成若干小的模块,通过【特定的语法】,可以进行任意组合,ArkTs中的每个ets文件,都可以看作是一个模块

2.默认导出和导入

1)简介:

默认导出:指一个模块,只能默认导出一个值或对象。使用时,可以自定义导入名称。

2)使用步骤:

①当前模块中国导出模块。

②需要使用的地方导入模块。

3)语法:

//默认导出
export  default 需要导出的内容
//默认导入
import xxx from '模块路径'

4)基础代码实例:

①导入num

src/main/ets/pages/05tools/module1.ets

//一个ets文件,就是一个模块,每个模块之间独立。
interface Person{
  name:string
  age:number
}
let num:number = 10
let person:Person = {
  name:'河马',
  age:88
}
//默认导出
export default num

src/main/ets/pages/Index.ets

//路径:查找文件时,从起点到终点的路线
//相对路径:从当前文件出发查找目标文件
// 找上一级用../
// 同级目录用 ./
import myNum from './05tools/module1'
console.log('module1中的数据',myNum)

如果想导出和导入person也是一样的

②导入person

src/main/ets/pages/05tools/module1.ets

//一个ets文件,就是一个模块,每个模块之间独立。
interface Person{
  name:string
  age:number
}
let num:number = 10
let person:Person = {
  name:'河马',
  age:88
}
//默认导出
export default person

src/main/ets/pages/Index.ets

//路径:查找文件时,从起点到终点的路线
//相对路径:从当前文件出发查找目标文件
// 找上一级用../
// 同级目录用 ./
import result from './05tools/module1'
console.log('module1中的数据',JSON.stringify(result))

③结果

3.按需导出和导入

1)简介:

按需导出:指一个模块,可以按照需要,导出多个特性。

2)基础代码实例:

①写法1 逐个导出

src/main/ets/pages/05tools/module2.ets

//按需导出
//写法1 逐个导出
export let name1:string = '荷花'
export let price:number = 9.98
export let sayHi = ()=>{
  console.log('打招呼')
}

src/main/ets/pages/Index.ets

//2.按需导入
import {name1,price,sayHi}from '../pages/05tools/module2'
console.log('module2中的数据',name1,price)
sayHi()

②写法2 一次性多个特性,进行导出

let name1:string = '荷花'
let price:number = 9.98
let sayHi = ()=>{
  console.log('打招呼')
}
//写法2 一次性多个特性,进行导出
export {
  name1,
  price,
  sayHi
}

Index代码不变,最后运行的效果都是一样的

3)别名:

4.全部导入

1)简介:

将所有的按需导入,全部导入进来→导出部分不需要调整,调整导入的语法即可。

2)基础代码实例:

src/main/ets/pages/05tools/module3.ets

let name1:string = '吕小布'
let name2:string = '陈美嘉'
let name3:string = '曾小贤'


let price1:number = 8888
let price2:number = 5555


let sayHi=()=>{
  console.log('打招呼')
}


let run=()=>{
  console.log('奔跑')
}


export {
  name1,name2,name3,
  price1,price2,
  sayHi,run
}

src/main/ets/pages/Index.ets

//3.全部导入
import * as Module3 from '../pages/05tools/module3'
console.log('全部导入方法中的数据',Module3.name1)
console.log('全部导入方法中的数据',Module3.name2)
console.log('全部导入方法中的数据',Module3.name3)
console.log('全部导入方法中的数据',Module3.price1)
Module3.sayHi()
Module3.run()

结果:

二.自定义组件

1.自定义组件-基础

1)概念:

由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。

2)基本语法及使用:

@Component
struct HelloComponent{
  //状态变量
  @State message:string=''
  build() {
    //描述UI
    Column(){
      Text('我是一个自定义组件')
      Button('我是按钮')
    }
  }
}
@Entry
@Component


struct Index {


  build() {
    Column(){
      HelloComponent()
    }
  }


}

3)具体应用:

比如说我们在一个界面上划分为上中下三部分,如头部、身体和腿,我们就可以定义三个组件来分别表示。

@Component
struct HelloComponent{
  //状态变量
  @State message:string=''
  build() {
    //描述UI
    Column(){
      Text('我是一个自定义组件')
      Button('我是按钮')
    }
  }
}
@Component
struct MyHead{
  //状态变量
  @State message:string=''
  build() {
    //描述UI
    Column(){
      Text('我是一个头部')
      Button('我是按钮')
    }
  }
}
@Component
struct MyBody{
  //状态变量
  @State message:string=''
  build() {
    //描述UI
    Column(){
      Text('我是一个中间的身体')
      Button('我是按钮')
    }
  }
}
@Component
struct MyLeg{
  //状态变量
  @State message:string=''
  build() {
    //描述UI
    Column(){
      Text('我是一个底下的腿部')
      Button('我是按钮')
    }
  }
}
@Entry
@Component


struct Index {


  build() {
    Column(){
      HelloComponent()
      MyHead()
      MyBody()
      MyLeg()
    }
  }


}

2.自定义组件-通用属性和语法

1)简介:

自定义组件可以通过点语法,设置 通用样式(宽高背景色…)、通用事件。

2)基础语法及使用:

@Component
struct HelloComponent {
  @State info:string = '默认info'
  build() {
    Row(){
      Text(this.info)
      Button('修改数据')
    }
    .width(100)
    .height(80)
    .backgroundColor(Color.Brown)
  }
}
@Entry
@Component


struct Index {


  build() {
    Column(){
      HelloComponent()
        .width(200)
        .height(100)
        .backgroundColor(Color.Orange)
        .onClick(()=>{
          console.log('外部添加的点击事件')
        })
    }
  }
}

我们未来会建一个Component目录中,当我们需要什么组件,就可以把这些组件写在这个文件夹里,这样我们以后用到这些组件就可以使用上文提到的导出,一般我们都是按需导出。

我们在文件夹里写的组件因为不是入口,所以无法直接预览,这个时候我们可以添加@Preview标签,这样我们就可以预览了,方便我们进行组件的调试与编写。

3.自定义组件-成员变量函数

1)简介:

除了必须要实现build()函数外,还可以定义其他成员函数,以及成员变量。

成员变量的值→外部可传参覆盖。

2)基础语法及使用

@Component
struct Module1 {
  //状态变量
  @State msg:string=''
  //成员变量-数据
  info:string = ''
  //成员变量*函数-可以外部修改
  sayHello=()=>{


  }
  //成员函数-不可以外部修改
  sayHi(){}
  build() {
    ///.....描述UI
  }
}
@Entry
@Component


struct Index {


  build() {
    Column(){
      Module1()
      Module1({info:'你好',msg:'修改一下状态变量'})
      Module1({sayHello(){console.log('传入的逻辑')}})
    }
  }


}

3)BuilderParam构建函数-传递UI

@Component
struct SonCom {
  //1.定义构建函数
  @BuilderParam ContentBuilder:()=>void=this.defaultBuilder
  //2.定义默认值
  @Builder
  defaultBuilder(){
    Text('默认的内容')
  }
  build() {
    //3.使用构建函数,构建结构
    Column(){
      this.ContentBuilder()
    }
  }
}
@Entry
@Component


struct Index {


  build() {
    Column(){
      SonCom(){
        Button('传入的内容')
      }


    }
  }


}
如果您觉得文章对您有帮助,可以支持下博主,网络一线牵,一分也是缘。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇