js-framework-syntax-js.md 3.7 KB
Newer Older
H
HelloCrease 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
# JS语法参考


JS文件用来定义HML页面的业务逻辑,支持ECMA规范的JavaScript语言。基于JavaScript语言的动态化能力,可以使应用更加富有表现力,具备更加灵活的设计。下面讲述JS文件的编译和运行的支持情况。


## 语法

支持ES6语法。轻量级智能穿戴支持的ES6语法有限,仅支持以下ES6 语法:

1. let/const

2. arrow functions

3. class

4. default value

5. destructuring assignment

6. destructuring binding pattern

7. enhanced object initializer

8. for-of

9. rest parameter

10. template strings

- 模块声明
  使用import方法引入功能模块:

H
HelloCrease 已提交
34

H
HelloCrease 已提交
35
  ```
Y
yamila 已提交
36
  import router from '@ohos.router';
H
HelloCrease 已提交
37 38 39 40 41
  ```

- 代码引用
  使用import方法导入js代码:

H
HelloCrease 已提交
42

H
HelloCrease 已提交
43 44 45 46 47 48 49 50
  ```
  import utils from '../../common/utils.js';
  ```


## 对象

- 页面对象
H
HelloCrease 已提交
51 52 53 54
    | 属性    | 类型              | 描述                                       |
    | ----- | --------------- | ---------------------------------------- |
    | data  | Object/Function | 页面的数据模型,类型是对象或者函数,如果类型是函数,返回值必须是对象。属性名不能以$或_开头,不要使用保留字for,&nbsp;if,&nbsp;show,&nbsp;tid。<br/> |
    | $refs | Object          | 持有注册过ref&nbsp;属性的DOM元素或子组件实例的对象。示例见[获取DOM元素](#获取dom元素)。 |
H
HelloCrease 已提交
55 56 57 58 59


## 获取DOM元素

1. 通过$refs获取DOM元素
H
HelloCrease 已提交
60 61

   ```html
H
HelloCrease 已提交
62 63 64 65 66 67
   <!-- index.hml -->
   <div class="container">
     <image-animator class="image-player" ref="animator" images="{{images}}" duration="1s" onclick="handleClick"></image-animator>
   </div>
   ```

H
HelloCrease 已提交
68 69

   ```js
H
HelloCrease 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
   // index.js
   export default {
     data: {
       images: [
         { src: '/common/frame1.png' },
         { src: '/common/frame2.png' },
         { src: '/common/frame3.png' },
       ],
     },
     handleClick() {
       const animator = this.$refs.animator; // 获取ref属性为animator的DOM元素
       const state = animator.getState();
       if (state === 'paused') {
         animator.resume();
       } else if (state === 'stopped') {
         animator.start();
       } else {
         animator.pause();
       }
     },
   };
   ```


## 生命周期接口

- 页面生命周期
H
HelloCrease 已提交
97 98 99 100 101 102 103 104
    | 属性        | 类型       | 参数   | 返回值  | 描述     | 触发时机                |
    | --------- | -------- | ---- | ---- | ------ | ------------------- |
    | onInit    | Function | 无    | 无    | 页面初始化  | 页面数据初始化完成时触发,只触发一次。 |
    | onReady   | Function | 无    | 无    | 页面创建完成 | 页面创建完成时触发,只触发一次。    |
    | onShow    | Function | 无    | 无    | 页面显示   | 页面显示时触发。            |
    | onHide    | Function | 无    | 无    | 页面消失   | 页面消失时触发。            |
    | onDestroy | Function | 无    | 无    | 页面销毁   | 页面销毁时触发。            |

H
HelloCrease 已提交
105 106
    页面A的生命周期接口的调用顺序:
  - 打开页面A:onInit() -&gt; onReady() -&gt; onShow()
H
HelloCrease 已提交
107

H
HelloCrease 已提交
108
  - 在页面A打开页面B:onHide() -&gt; onDestroy()
H
HelloCrease 已提交
109

H
HelloCrease 已提交
110
  - 从页面B返回页面A:onInit() -&gt; onReady() -&gt; onShow()
H
HelloCrease 已提交
111

H
HelloCrease 已提交
112
  - 退出页面A:onHide() -&gt; onDestroy()
H
HelloCrease 已提交
113

H
HelloCrease 已提交
114
  - 页面隐藏到后台运行:onHide()
H
HelloCrease 已提交
115

H
HelloCrease 已提交
116 117 118
  - 页面从后台运行恢复到前台:onShow()

- 应用生命周期
H
HelloCrease 已提交
119 120 121 122
    | 属性        | 类型       | 参数   | 返回值  | 描述   | 触发时机      |
    | --------- | -------- | ---- | ---- | ---- | --------- |
    | onCreate  | Function | 无    | 无    | 应用创建 | 当应用创建时调用。 |
    | onDestroy | Function | 无    | 无    | 应用退出 | 当应用退出时触发。 |