• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用eTS语言开发(传统代码方式)
2
3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
4> 请使用**DevEco Studio V3.0.0.601 Beta1**及更高版本。
5>
6> 为确保运行效果,本文以使用**DevEco Studio V3.0.0.900 Beta3**版本为例,点击[此处](https://developer.harmonyos.com/cn/develop/deveco-studio#download_beta_openharmony)获取下载链接。
7
8
9## 创建eTS工程
10
111. 若首次打开**DevEco Studio**,请点击**Create Project**创建工程。如果已有一个工程,请点击**File** > **New** > **Create Project**。选择模板“**Empty Ability**”,点击**Next**进行下一步配置。
12
13   ![zh-cn_image_0000001223556342](figures/zh-cn_image_0000001223556342.png)
14
152. 进入配置工程界面,**UI Syntax**选择“**eTS**”,其他参数保持默认设置即可。
16
17   ![zh-cn_image_0000001223716826](figures/zh-cn_image_0000001223716826.png)
18
193. 点击**Finish**,工具会自动生成示例代码和相关资源,等待工程创建完成。
20
21
22## eTS工程项目文件
23
24- **entry** :OpenHarmony工程模块,编译构建生成一个[HAP](../../glossary.md#hap)包。
25  - **src > main > ets** :用于存放ets源码。
26  - **src > main > ets > MainAbility** :应用/服务的入口。
27  - **src > main > ets > MainAbility > pages** :MainAbility包含的页面。
28  - **src > main > ets > MainAbility > pages > index.ets** :pages列表中的第一个页面,即应用的首页入口。
29  - **src > main > ets > MainAbility > app.ets** :承载Ability生命周期。
30  - **src > main > resources** :用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。
31  - **src > main > config.json** :模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,详见[应用包结构配置文件的说明](package-structure.md)。
32  - **build-profile.json5** :当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。
33  - **hvigorfile.js** :模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。
34
35- **build-profile.json5** :应用级配置信息,包括签名、产品配置等。
36
37- **hvigorfile.js** :应用级编译构建任务脚本。
38
39
40## 构建第一个页面
41
421. 使用文本组件。
43工程同步完成后,在“**Project**”窗口,点击“**entry > src > main > ets > MainAbility > pages**”,打开“**index.ets**”文件,可以看到页面由Text组件组成。“**index.ets**”文件的示例如下:
44
45
46   ```ts
47   // index.ets
48   @Entry
49   @Component
50   struct Index {
51     @State message: string = 'Hello World'
52
53     build() {
54       Row() {
55         Column() {
56           Text(this.message)
57             .fontSize(50)
58             .fontWeight(FontWeight.Bold)
59         }
60         .width('100%')
61       }
62       .height('100%')
63     }
64   }
65   ```
66
672. 添加按钮。
68   在默认页面基础上,我们添加一个Button组件,作为按钮响应用户点击,从而实现跳转到另一个页面。“**index.ets**”文件的示例如下:
69
70
71   ```ts
72   // index.ets
73   @Entry
74   @Component
75   struct Index {
76     @State message: string = 'Hello World'
77
78     build() {
79       Row() {
80         Column() {
81           Text(this.message)
82             .fontSize(50)
83             .fontWeight(FontWeight.Bold)
84           // 添加按钮,以响应用户点击
85           Button() {
86             Text('Next')
87               .fontSize(30)
88               .fontWeight(FontWeight.Bold)
89           }
90           .type(ButtonType.Capsule)
91           .margin({
92             top: 20
93           })
94           .backgroundColor('#0D9FFB')
95           .width('40%')
96           .height('5%')
97         }
98         .width('100%')
99       }
100       .height('100%')
101     }
102   }
103   ```
104
1053. 在编辑窗口右上角的侧边工具栏,点击Previewer,打开预览器。第一个页面效果如下图所示:
106
107   ![zh-cn_image_0000001216239356](figures/zh-cn_image_0000001216239356.png)
108
109
110## 构建第二个页面
111
1121. 创建第二个页面。
113    - 新建第二个页面文件。在“**Project**”窗口,打开“**entry > src > main > ets > MainAbility**”,右键点击“**pages**”文件夹,选择“**New > eTS File**”,命名为“**second**”,点击“**Finish**”。可以看到文件目录结构如下:
114
115    ![zh-cn_image_0000001223397122](figures/zh-cn_image_0000001223397122.png)
116
117    > 说明:
118    >
119    > 开发者也可以在右键点击“**pages**”文件夹时,选择“**new > Page**”,则无需手动配置相关页面的路由。
120
121    - 配置第二个页面的路由。在config.json文件中的“module - js - pages”下配置第二个页面的路由“pages/second”。示例如下:
122
123    ```
124      {
125        ...
126          "module": {
127           ...
128            "js": [
129              {
130                ...
131                "pages": [
132                "pages/index",
133                "pages/second"
134              ]
135                ...
136              }
137          ]
138        }
139      }
140    ```
141
1422. 添加文本及按钮。
143   参照第一个页面,在第二个页面添加Text组件、Button组件等,并设置其样式。“**second.ets**”文件的示例如下:
144
145
146   ```ts
147   // second.ets
148   @Entry
149   @Component
150   struct Second {
151     @State message: string = 'Hi there'
152
153     build() {
154       Row() {
155         Column() {
156           Text(this.message)
157             .fontSize(50)
158             .fontWeight(FontWeight.Bold)
159           Button() {
160             Text('Back')
161               .fontSize(25)
162               .fontWeight(FontWeight.Bold)
163           }
164           .type(ButtonType.Capsule)
165           .margin({
166             top: 20
167           })
168           .backgroundColor('#0D9FFB')
169           .width('40%')
170           .height('5%')
171         }
172         .width('100%')
173       }
174       .height('100%')
175     }
176   }
177   ```
178
179
180## 实现页面间的跳转
181
182页面间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目标页面,从而实现跳转。使用页面路由请导入router模块。
183
1841. 第一个页面跳转到第二个页面。
185   在第一个页面中,跳转按钮绑定onClick事件,点击按钮时跳转到第二页。“**index.ets**”文件的示例如下:
186
187
188   ```ts
189   // index.ets
190   import router from '@ohos.router';
191
192   @Entry
193   @Component
194   struct Index {
195     @State message: string = 'Hello World'
196
197     build() {
198       Row() {
199         Column() {
200           Text(this.message)
201             .fontSize(50)
202             .fontWeight(FontWeight.Bold)
203           // 添加按钮,以响应用户点击
204           Button() {
205             Text('Next')
206               .fontSize(30)
207               .fontWeight(FontWeight.Bold)
208           }
209           .type(ButtonType.Capsule)
210           .margin({
211             top: 20
212           })
213           .backgroundColor('#0D9FFB')
214           .width('40%')
215           .height('5%')
216           // 跳转按钮绑定onClick事件,点击时跳转到第二页
217           .onClick(() => {
218             router.push({ url: 'pages/second' })
219           })
220         }
221         .width('100%')
222       }
223       .height('100%')
224     }
225   }
226   ```
227
2282. 第二个页面返回到第一个页面。
229   在第二个页面中,返回按钮绑定onClick事件,点击按钮时返回到第一页。“**second.ets**”文件的示例如下:
230
231
232   ```ts
233   // second.ets
234   import router from '@ohos.router';
235
236   @Entry
237   @Component
238   struct Second {
239     @State message: string = 'Hi there'
240
241     build() {
242       Row() {
243         Column() {
244           Text(this.message)
245             .fontSize(50)
246             .fontWeight(FontWeight.Bold)
247           Button() {
248             Text('Back')
249               .fontSize(25)
250               .fontWeight(FontWeight.Bold)
251           }
252           .type(ButtonType.Capsule)
253           .margin({
254             top: 20
255           })
256           .backgroundColor('#0D9FFB')
257           .width('40%')
258           .height('5%')
259           // 返回按钮绑定onClick事件,点击按钮时返回到第一页
260           .onClick(() => {
261             router.back()
262           })
263         }
264         .width('100%')
265       }
266       .height('100%')
267     }
268   }
269   ```
270
2713. 打开index.ets文件,点击预览器中的 ![zh-cn_image_0000001262219043](figures/zh-cn_image_0000001262219043.png) 按钮进行刷新。 效果如下图所示:
272
273   ![zh-cn_image_0000001260684127](figures/zh-cn_image_0000001260684127.png)
274
275
276## 使用真机运行应用
277
2781. 将搭载OpenHarmony标准系统的开发板与电脑连接。
279
2802. 点击**File** > **Project Structure** > **Project** > **SigningConfigs**界面勾选“**Automatically generate signing**”,等待自动签名完成即可,点击“**OK**”。如下图所示:
281
282   ![zh-cn_image_0000001268077317](figures/zh-cn_image_0000001268077317.png)
283
2843. 在编辑窗口右上角的工具栏,点击![zh-cn_image_0000001262206247](figures/zh-cn_image_0000001262206247.png)按钮运行。效果如下图所示:
285
286   ![zh-cn_image_0000001217526428](figures/zh-cn_image_0000001217526428.png)
287
288恭喜您已经使用eTS语言(传统代码方式)开发完成了第一个OpenHarmony应用,快来[探索更多的OpenHarmony功能](../application-dev-guide.md)吧。
289