99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

快應(yīng)用 script腳本

2020-08-10 15:01 更新

用來定義頁面數(shù)據(jù)和實(shí)現(xiàn)生命周期接口

語法


支持 ES6 語法

模塊聲明

可以通過 import 引入功能模塊,在代碼中調(diào)用模塊方法(具體參看接口部分文檔說明)

import fetch from "@system.fetch"

代碼引用

JS 代碼引用推薦使用 import 來導(dǎo)入, 例如:

import utils from '../Common/utils.js'

注意: 快應(yīng)用環(huán)境不是 node 環(huán)境,不要引用 node 原生模塊,如 import fs from 'fs'

對象


頁面級(jí)組件

屬性類型描述
data deprecatedObject | Function頁面級(jí)組件的數(shù)據(jù)模型,能夠轉(zhuǎn)換為 JSON 對象;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字
如果是函數(shù),返回結(jié)果必須是對象,在組件初始化時(shí)會(huì)執(zhí)行函數(shù)獲取結(jié)果作為 data 的值
使用 data 方式聲明的屬性會(huì)被外部數(shù)據(jù)覆蓋,因此存在一定安全風(fēng)險(xiǎn),推薦使用下面的 public,protected,private 來聲明屬性(注意:它們不能與 data 同時(shí)聲明)
public 1000+Object頁面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:public 內(nèi)定義的屬性允許被傳入的數(shù)據(jù)覆蓋,如果外部傳入數(shù)據(jù)的某個(gè)屬性未被聲明,在 public 中不會(huì)新增這個(gè)屬性
protected 1000+Object頁面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:protected 內(nèi)定義的屬性,允許被應(yīng)用內(nèi)部頁面請求傳遞的數(shù)據(jù)覆蓋,不允許被應(yīng)用外部請求傳遞的數(shù)據(jù)覆蓋
private 1000+Object頁面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:private 內(nèi)定義的屬性不允許被覆蓋
computed 1050+Object計(jì)算屬性,屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字

自定義組件

屬性類型描述
dataObject | Function自定義組件的數(shù)據(jù)模型,能夠轉(zhuǎn)換為 JSON 對象;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字
如果是函數(shù),返回結(jié)果必須是對象,在組件初始化時(shí)會(huì)執(zhí)行函數(shù)獲取結(jié)果作為 data 的值
propsArray | Object定義組件外部可傳入的所有屬性;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字
在模板代碼中,請使用短橫線分隔命名代替駝峰命名。如,屬性定義 props: ['propA'],可通過<tag prop-a='xx'>方式傳遞到組件內(nèi)部
支持 prop 驗(yàn)證 1010+
computed 1050+Object計(jì)算屬性,屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字

prop 驗(yàn)證

在自定義組件中,可將 props 定義為帶驗(yàn)證需求的對象。其中,key 為屬性名,value 為屬性對應(yīng)的驗(yàn)證需求。驗(yàn)證失敗則輸出錯(cuò)誤提示日志,增加 prop 驗(yàn)證有利于規(guī)范自定義組件的使用

定義:

屬性類型描述
type 1010+-檢查屬性值的類型。支持單一類型和多種可能類型,可在原生和自定義構(gòu)造函數(shù)中任意選擇,單獨(dú)或組合使用
  • 原生構(gòu)造函數(shù):String | Number | Boolean | Function | Object | Array | Symbol
  • 自定義構(gòu)造函數(shù)
default 1010+-設(shè)置屬性的默認(rèn)值
required 1010+Boolean設(shè)置屬性是否必填
validator 1010+Function設(shè)置自定義驗(yàn)證函數(shù)。若函數(shù)的返回值為真,則通過驗(yàn)證;否則驗(yàn)證失敗

示例:

<script>
  export default {
    props: {
      // 單一類型檢查的簡寫
      propA: Number,
      // 多種可能類型的簡寫
      propB: [String, Number],
      // 必填的字符串
      propC: {
        type: String,
        required: true
      },
      // 帶默認(rèn)值的數(shù)字
      propD: {
        type: Number,
        default: 100
      },
      // 帶有默認(rèn)值的對象
      propE: {
        type: Object,
        default () {
          return { message: 'hello' }
        }
      },
      // 自定義驗(yàn)證函數(shù)
      propF: {
        validator (value) {
          return value === 'hello'
        }
      }
    }
  }
</script>

計(jì)算屬性 1050+

  • 類型:{ [key: string]: Function | { get: Function, set: Function } }
  • 詳細(xì):計(jì)算屬性將被混入到 Vm 實(shí)例中。所有 getter 和 setter 的 this 上下文自動(dòng)地綁定為 Vm 實(shí)例。計(jì)算屬性的結(jié)果會(huì)被緩存,除非依賴的響應(yīng)式屬性變化才會(huì)重新計(jì)算。注意,如果某個(gè)依賴 (比如非響應(yīng)式屬性) 在該實(shí)例范疇之外,則計(jì)算屬性是不會(huì)被更新的。

示例:

export default {
  data: {
    firstName: 'Quick',
    lastName: 'App'
  },
  computed: {
    fullName: {
      get() {
        return `${this.firstName} ${this.lastName}`
      },
      set(value) {
        const names = value.split(' ')
        this.firstName = names[0]
        this.lastName = names[names.length - 1]
      }
    }
  },
  onReady() {
    console.log(this.fullName) // Quick App
    this.fullName = 'John Doe'
    console.log(this.firstName) // John
    console.log(this.lastName) // Doe
  }
}

公共對象

屬性 類型 描述
$app Object 應(yīng)用對象
$page Object 頁面對象
$valid Boolean 頁面對象是否有效
$visible Boolean 頁面是否處于用戶可見狀態(tài)

應(yīng)用對象

可通過$app訪問

屬性 類型 描述
$def Object 使用this.$app.$def獲取在app.ux中暴露的對象
$data Object 使用this.$app.$data獲取在manifest.jsonconfig.data中聲明的全局?jǐn)?shù)據(jù)

頁面對象

可通過$page訪問

屬性 類型 描述
action String 獲取打開當(dāng)前頁面的action。僅在當(dāng)前頁面是通過filter匹配的方式打開時(shí)有效,否則為undefined。參見manifest文件
uri String 獲取打開當(dāng)前頁面的uri。僅在當(dāng)前頁面是通過filter匹配的方式打開時(shí)有效,否則為undefined。參見manifest文件

方法


數(shù)據(jù)方法

屬性 類型 參數(shù) 描述
$set Function key: String
value: Any
添加數(shù)據(jù)屬性,必須在onInit函數(shù)中使用,否則<template>中數(shù)據(jù)綁定無法生效用法:this.$set('key',value) this.$vm('id').$set('key',value)
$delete Function key: String 刪除數(shù)據(jù)屬性,如果在onInit函數(shù)中使用,會(huì)導(dǎo)致<template>中相應(yīng)的數(shù)據(jù)綁定無法生效用法:this.$delete('key') this.$vm('id').$delete('key')

公共方法

屬性 類型 參數(shù) 描述
$element Function id: String 組件id 獲取指定id的組件dom對象,如果沒有指定id,則返回根組件dom對象用法:<template> <div id='xxx'></div> </template> this.$element('xxx') 獲取id為xxx的div組件實(shí)例對象 this.$element() 獲取根組件實(shí)例對象
$root Function 獲取頂層ViewModel
$parent Function 獲取父親ViewModel
$child Function id: String 組件id 獲取指定id的自定義組件的ViewModel用法:this.$child('xxx') 獲取id為xxx的div組件ViewModel
$vm deprecated Function id: String 組件id 請使用上面this.$child('xxx')替代
$rootElement deprecated Function 請使用上面this.$element()替代
$forceUpdate Function 強(qiáng)制頁面刷新

事件方法

屬性 類型 參數(shù) 描述
$on Function type: String 事件名
handler: Function 事件句柄函數(shù)
添加事件處理句柄用法:this.$on('xxxx', this.fn) fn是在<script>中定義的函數(shù)
$off Function type: String 事件名
handler: Function 事件句柄函數(shù)
刪除事件處理句柄用法:this.$off('xxxx', this.fn) this.$off('xxx') 刪除指定事件的所有處理句柄
$dispatch Function type: String 事件名 向上層組件發(fā)送事件通知用法:this.$dispatch('xxx')正常情況下,會(huì)一直向上傳遞事件(冒泡)如果要停止冒泡,在事件句柄函數(shù)中調(diào)用evt.stop()即可
$broadcast Function type: String 事件名 向子組件發(fā)送事件通知用法:this.$broadcast('xxx')正常情況下,會(huì)一直向下傳遞事件如果要停止傳遞,在事件句柄函數(shù)中調(diào)用evt.stop()即可
$emit Function type: String 事件名
data: Object 事件參數(shù)
觸發(fā)事件,對應(yīng)的句柄函數(shù)被調(diào)用用法:this.$emit('xxx') this.$emit('xxx', {a:1})傳遞的事件參數(shù)可在事件回調(diào)函數(shù)中,通過evt.detail來訪問,例如evt.detail.a
$emitElement Function type: String 事件名
data: Object 事件參數(shù)
id: String 組件id (默認(rèn)為-1 代表根元素)
觸發(fā)組件事件, 對應(yīng)的句柄函數(shù)被調(diào)用用法:this.$emitElement('xxx', null, 'id') this.$emitElement('xxx', {a:1})傳遞的事件參數(shù)可在事件回調(diào)函數(shù)中,通過evt.detail來訪問,例如evt.detail.a
$watch Function data: String 屬性名, 支持'a.b.c'格式,不支持?jǐn)?shù)組索引
handler: String 事件句柄函數(shù)名, 函數(shù)的第一個(gè)參數(shù)為新的屬性值,第二個(gè)參數(shù)為舊的屬性值
動(dòng)態(tài)添加屬性/事件綁定,屬性必須在data中定義,handler函數(shù)必須在<script>定義;當(dāng)屬性值發(fā)生變化時(shí)事件才被觸發(fā)用法:this.$watch('a','handler')

頁面方法

可通過$page訪問

屬性 類型 參數(shù) 描述
setTitleBar Function text: String 標(biāo)題欄文字
textColor: String 文字顏色
backgroundColor: String 背景顏色
backgroundOpacity 正式版本可用: Number 背景透明度
menu 正式版本可用: Boolean 是否在標(biāo)題欄右上角顯示菜單按鈕
設(shè)置當(dāng)前頁面的標(biāo)題欄用法:this.$page.setTitleBar({text:'Hello', textColor:'#FF0000', backgroundColor:'#FFFFFF', backgroundOpacity:0.5, menu: true})

生命周期接口


頁面生命周期

屬性 類型 參數(shù) 返回值 描述 觸發(fā)時(shí)機(jī)
onInit Function 監(jiān)聽頁面初始化 當(dāng)頁面完成初始化時(shí)調(diào)用,只觸發(fā)一次
onReady Function 監(jiān)聽頁面創(chuàng)建完成 當(dāng)頁面完成創(chuàng)建可以顯示時(shí)觸發(fā),只觸發(fā)一次
onShow Function 監(jiān)聽頁面顯示 當(dāng)進(jìn)入頁面時(shí)觸發(fā)
onHide Function 監(jiān)聽頁面隱藏 當(dāng)頁面跳轉(zhuǎn)離開時(shí)觸發(fā)
onDestroy Function 監(jiān)聽頁面退出 當(dāng)頁面跳轉(zhuǎn)離開(不進(jìn)入導(dǎo)航棧)時(shí)觸發(fā)
onBackPress Function Boolean 監(jiān)聽返回按鈕動(dòng)作 當(dāng)用戶點(diǎn)擊返回按鈕時(shí)觸發(fā)。返回true表示頁面自己處理返回邏輯,返回false表示使用默認(rèn)的返回邏輯,不返回值會(huì)作為false處理
onMenuPress Function 監(jiān)聽菜單按鈕動(dòng)作 當(dāng)用戶點(diǎn)擊菜單按鈕時(shí)觸發(fā)

頁面的生命周期接口的調(diào)用順序:

  • 打開頁面A:onInit() -> onReady() -> onShow()
  • 在頁面A打開頁面B:onHide()
  • 從頁面B返回頁面A:onShow()
  • A頁面返回:onBackPress() -> onHide() -> onDestroy()

應(yīng)用生命周期

屬性 類型 參數(shù) 返回值 描述 觸發(fā)時(shí)機(jī)
onCreate Function 監(jiān)聽?wèi)?yīng)用創(chuàng)建 當(dāng)應(yīng)用創(chuàng)建時(shí)調(diào)用
onDestroy Function 監(jiān)聽?wèi)?yīng)用銷毀 當(dāng)應(yīng)用銷毀時(shí)觸發(fā)

消息通道(BroadcastChannel) 正式版本可用

用來實(shí)現(xiàn)不同頁面之間的相互通信。

接口說明

在BroadcastChannel的構(gòu)造函數(shù)中,只支持接受一個(gè)參數(shù),就是"頻道名稱"(channel name)

比如:

const test = new BroadcastChannel('channel')

BroadcastChannel 定義的接口如下:

declare interface BroadcastChannel = {
  name: string,
  postMessage: (message: any) => void;
  onmessage: (event: MessageEvent) => void;
  close: () => void;
}

消息對象(MessageEvent)的類型定義如下:

declare interface MessageEvent = {
  type: string, // "message"
  data: any
}

對參數(shù)的說明:

名稱 類型 參數(shù) 描述
name String String:頻道名稱 頻道名稱,區(qū)分不同的消息頻道(注意:不同頻道之間不可通信)。
postMessage Function Object: 消息內(nèi)容 用于在當(dāng)前頻道中廣播消息。
onmessage Function Event:消息對象 訂閱消息。在頻道中接收到廣播消息之后,會(huì)給所有訂閱者派發(fā)消息事件。
close Function 關(guān)閉當(dāng)前的頻道。

用法

假設(shè)在我們的應(yīng)用中,有A、B、C三個(gè)頁面

在頁面 A 中:

const pageA = new BroadcastChannel('channel1')
pageA.postMessage('haha!')

在頁面 B 中:

const pageB = new BroadcastChannel('channel1')

在頁面 C 中:

const pageC = new BroadcastChannel('channel1')
pageC.onmessage = function (event) {
  console.log(event.data)
  pageC.postMessage('hello, i am here!')
}

這樣,頁面 A 、B 、C 都創(chuàng)建一個(gè)監(jiān)聽了 'channel1' 頻道的 BroadcastChannel 對象,它們之間可以通過這個(gè)對象實(shí)現(xiàn)互相通信。

當(dāng) pageA 發(fā)布了 'haha!' 消息時(shí),pageC 將收到一個(gè)消息事件,其 data 字段等于 'haha!',然后也向頻道中回復(fù)一條消息。注意:自己不會(huì)收到自己發(fā)的消息。

但是 pageB 并不會(huì)收到這些消息,因?yàn)樗麤]有實(shí)現(xiàn)onmessage 方法,相當(dāng)于沒有接收頻道中的消息,所以他實(shí)際上不是一個(gè)訂閱者。

注意:在pageA銷毀channel當(dāng)前不與頁面context進(jìn)行上下文綁定,需要主動(dòng)關(guān)閉消息通道,如下所示:

const pageA = new BroadcastChannel('tom')
pageA.close();


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)