用來(lái)定義頁(yè)面數(shù)據(jù)和實(shí)現(xiàn)生命周期接口
支持 ES6 語(yǔ)法
可以通過(guò) import 引入功能模塊,在代碼中調(diào)用模塊方法(具體參看接口部分文檔說(shuō)明)
import fetch from "@system.fetch"
JS 代碼引用推薦使用 import 來(lái)導(dǎo)入, 例如:
import utils from '../Common/utils.js'
注意: 快應(yīng)用環(huán)境不是 node 環(huán)境,不要引用 node 原生模塊,如 import fs from 'fs'
屬性 | 類型 | 描述 |
---|---|---|
data deprecated | Object | Function | 頁(yè)面級(jí)組件的數(shù)據(jù)模型,能夠轉(zhuǎn)換為 JSON 對(duì)象;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字 如果是函數(shù),返回結(jié)果必須是對(duì)象,在組件初始化時(shí)會(huì)執(zhí)行函數(shù)獲取結(jié)果作為 data 的值 使用 data 方式聲明的屬性會(huì)被外部數(shù)據(jù)覆蓋,因此存在一定安全風(fēng)險(xiǎn),推薦使用下面的 public,protected,private 來(lái)聲明屬性(注意:它們不能與 data 同時(shí)聲明) |
public 1000+ | Object | 頁(yè)面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:public 內(nèi)定義的屬性允許被傳入的數(shù)據(jù)覆蓋,如果外部傳入數(shù)據(jù)的某個(gè)屬性未被聲明,在 public 中不會(huì)新增這個(gè)屬性 |
protected 1000+ | Object | 頁(yè)面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:protected 內(nèi)定義的屬性,允許被應(yīng)用內(nèi)部頁(yè)面請(qǐng)求傳遞的數(shù)據(jù)覆蓋,不允許被應(yīng)用外部請(qǐng)求傳遞的數(shù)據(jù)覆蓋 |
private 1000+ | Object | 頁(yè)面級(jí)組件的數(shù)據(jù)模型,影響傳入數(shù)據(jù)的覆蓋機(jī)制:private 內(nèi)定義的屬性不允許被覆蓋 |
computed 1050+ | Object | 計(jì)算屬性,屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字 |
屬性 | 類型 | 描述 |
---|---|---|
data | Object | Function | 自定義組件的數(shù)據(jù)模型,能夠轉(zhuǎn)換為 JSON 對(duì)象;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字 如果是函數(shù),返回結(jié)果必須是對(duì)象,在組件初始化時(shí)會(huì)執(zhí)行函數(shù)獲取結(jié)果作為 data 的值 |
props | Array | Object | 定義組件外部可傳入的所有屬性;屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字 在模板代碼中,請(qǐng)使用短橫線分隔命名代替駝峰命名。如,屬性定義 props: ['propA'],可通過(guò) <tag prop-a='xx'> 方式傳遞到組件內(nèi)部支持 prop 驗(yàn)證 1010+ |
computed 1050+ | Object | 計(jì)算屬性,屬性名不能以$或_開頭, 不要使用 for, if, show, tid 等保留字 |
在自定義組件中,可將 props 定義為帶驗(yàn)證需求的對(duì)象。其中,key 為屬性名,value 為屬性對(duì)應(yīng)的驗(yàn)證需求。驗(yàn)證失敗則輸出錯(cuò)誤提示日志,增加 prop 驗(yàn)證有利于規(guī)范自定義組件的使用
定義:
屬性 | 類型 | 描述 |
---|---|---|
type 1010+ | - | 檢查屬性值的類型。支持單一類型和多種可能類型,可在原生和自定義構(gòu)造函數(shù)中任意選擇,單獨(dú)或組合使用
|
default 1010+ | - | 設(shè)置屬性的默認(rèn)值 |
required 1010+ | Boolean | 設(shè)置屬性是否必填 |
validator 1010+ | Function | 設(shè)置自定義驗(yàn)證函數(shù)。若函數(shù)的返回值為真,則通過(guò)驗(yàn)證;否則驗(yàn)證失敗 |
示例:
<script>
export default {
props: {
// 單一類型檢查的簡(jiǎn)寫
propA: Number,
// 多種可能類型的簡(jiǎn)寫
propB: [String, Number],
// 必填的字符串
propC: {
type: String,
required: true
},
// 帶默認(rèn)值的數(shù)字
propD: {
type: Number,
default: 100
},
// 帶有默認(rèn)值的對(duì)象
propE: {
type: Object,
default () {
return { message: 'hello' }
}
},
// 自定義驗(yàn)證函數(shù)
propF: {
validator (value) {
return value === 'hello'
}
}
}
}
</script>
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)用對(duì)象 |
$page | Object | 頁(yè)面對(duì)象 |
$valid | Boolean | 頁(yè)面對(duì)象是否有效 |
$visible | Boolean | 頁(yè)面是否處于用戶可見狀態(tài) |
可通過(guò)$app
訪問(wèn)
屬性 | 類型 | 描述 |
---|---|---|
$def | Object | 使用this.$app.$def 獲取在app.ux 中暴露的對(duì)象 |
$data | Object | 使用this.$app.$data 獲取在manifest.json 的config.data 中聲明的全局?jǐn)?shù)據(jù) |
可通過(guò)$page
訪問(wèn)
屬性 | 類型 | 描述 |
---|---|---|
action | String | 獲取打開當(dāng)前頁(yè)面的action。僅在當(dāng)前頁(yè)面是通過(guò)filter匹配的方式打開時(shí)有效,否則為undefined。參見manifest文件 |
uri | String | 獲取打開當(dāng)前頁(yè)面的uri。僅在當(dāng)前頁(yè)面是通過(guò)filter匹配的方式打開時(shí)有效,否則為undefined。參見manifest文件 |
屬性 | 類型 | 參數(shù) | 描述 |
---|---|---|---|
$set | Function | key: String
value: Any |
添加數(shù)據(jù)屬性,必須在onInit函數(shù)中使用,否則<template> 中數(shù)據(jù)綁定無(wú)法生效用法: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ù)綁定無(wú)法生效用法:this.$delete('key') this.$vm('id').$delete('key')
|
屬性 | 類型 | 參數(shù) | 描述 |
---|---|---|---|
$element | Function | id: String 組件id | 獲取指定id的組件dom對(duì)象,如果沒(méi)有指定id,則返回根組件dom對(duì)象用法:<template> <div id='xxx'></div> </template> this.$element('xxx') 獲取id為xxx的div組件實(shí)例對(duì)象 this.$element() 獲取根組件實(shí)例對(duì)象 |
$root | Function | 無(wú) | 獲取頂層ViewModel |
$parent | Function | 無(wú) | 獲取父親ViewModel |
$child | Function | id: String 組件id | 獲取指定id的自定義組件的ViewModel用法:this.$child('xxx') 獲取id為xxx的div組件ViewModel |
$vm deprecated
|
Function | id: String 組件id | 請(qǐng)使用上面this.$child('xxx') 替代 |
$rootElement deprecated
|
Function | 無(wú) | 請(qǐng)使用上面this.$element() 替代 |
$forceUpdate | Function | 無(wú) | 強(qiáng)制頁(yè)面刷新 |
屬性 | 類型 | 參數(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ā)事件,對(duì)應(yīng)的句柄函數(shù)被調(diào)用用法:this.$emit('xxx') this.$emit('xxx', {a:1}) 傳遞的事件參數(shù)可在事件回調(diào)函數(shù)中,通過(guò)evt.detail 來(lái)訪問(wèn),例如evt.detail.a
|
$emitElement | Function | type: String 事件名
data: Object 事件參數(shù) id: String 組件id (默認(rèn)為-1 代表根元素) |
觸發(fā)組件事件, 對(duì)應(yīng)的句柄函數(shù)被調(diào)用用法:this.$emitElement('xxx', null, 'id') this.$emitElement('xxx', {a:1}) 傳遞的事件參數(shù)可在事件回調(diào)函數(shù)中,通過(guò)evt.detail 來(lái)訪問(wèn),例如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')
|
可通過(guò)$page
訪問(wèn)
屬性 | 類型 | 參數(shù) | 描述 |
---|---|---|---|
setTitleBar | Function | text: String 標(biāo)題欄文字
textColor: String 文字顏色 backgroundColor: String 背景顏色 backgroundOpacity 正式版本可用 : Number 背景透明度
menu 正式版本可用 : Boolean 是否在標(biāo)題欄右上角顯示菜單按鈕 |
設(shè)置當(dāng)前頁(yè)面的標(biāo)題欄用法:this.$page.setTitleBar({text:'Hello', textColor:'#FF0000', backgroundColor:'#FFFFFF', backgroundOpacity:0.5, menu: true})
|
屬性 | 類型 | 參數(shù) | 返回值 | 描述 | 觸發(fā)時(shí)機(jī) |
---|---|---|---|---|---|
onInit | Function | 無(wú) | 無(wú) | 監(jiān)聽頁(yè)面初始化 | 當(dāng)頁(yè)面完成初始化時(shí)調(diào)用,只觸發(fā)一次 |
onReady | Function | 無(wú) | 無(wú) | 監(jiān)聽頁(yè)面創(chuàng)建完成 | 當(dāng)頁(yè)面完成創(chuàng)建可以顯示時(shí)觸發(fā),只觸發(fā)一次 |
onShow | Function | 無(wú) | 無(wú) | 監(jiān)聽頁(yè)面顯示 | 當(dāng)進(jìn)入頁(yè)面時(shí)觸發(fā) |
onHide | Function | 無(wú) | 無(wú) | 監(jiān)聽頁(yè)面隱藏 | 當(dāng)頁(yè)面跳轉(zhuǎn)離開時(shí)觸發(fā) |
onDestroy | Function | 無(wú) | 無(wú) | 監(jiān)聽頁(yè)面退出 | 當(dāng)頁(yè)面跳轉(zhuǎn)離開(不進(jìn)入導(dǎo)航棧)時(shí)觸發(fā) |
onBackPress | Function | 無(wú) | Boolean | 監(jiān)聽返回按鈕動(dòng)作 | 當(dāng)用戶點(diǎn)擊返回按鈕時(shí)觸發(fā)。返回true表示頁(yè)面自己處理返回邏輯,返回false表示使用默認(rèn)的返回邏輯,不返回值會(huì)作為false處理 |
onMenuPress | Function | 無(wú) | 無(wú) | 監(jiān)聽菜單按鈕動(dòng)作 | 當(dāng)用戶點(diǎn)擊菜單按鈕時(shí)觸發(fā) |
頁(yè)面的生命周期接口的調(diào)用順序:
屬性 | 類型 | 參數(shù) | 返回值 | 描述 | 觸發(fā)時(shí)機(jī) |
---|---|---|---|---|---|
onCreate | Function | 無(wú) | 無(wú) | 監(jiān)聽?wèi)?yīng)用創(chuàng)建 | 當(dāng)應(yīng)用創(chuàng)建時(shí)調(diào)用 |
onDestroy | Function | 無(wú) | 無(wú) | 監(jiān)聽?wèi)?yīng)用銷毀 | 當(dāng)應(yīng)用銷毀時(shí)觸發(fā) |
正式版本可用
用來(lái)實(shí)現(xiàn)不同頁(yè)面之間的相互通信。
在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;
}
消息對(duì)象(MessageEvent)的類型定義如下:
declare interface MessageEvent = {
type: string, // "message"
data: any
}
對(duì)參數(shù)的說(shuō)明:
名稱 | 類型 | 參數(shù) | 描述 |
---|---|---|---|
name | String
|
String:頻道名稱 | 頻道名稱,區(qū)分不同的消息頻道(注意:不同頻道之間不可通信)。 |
postMessage | Function
|
Object: 消息內(nèi)容 | 用于在當(dāng)前頻道中廣播消息。 |
onmessage | Function
|
Event:消息對(duì)象 | 訂閱消息。在頻道中接收到廣播消息之后,會(huì)給所有訂閱者派發(fā)消息事件。 |
close | Function
|
無(wú) | 關(guān)閉當(dāng)前的頻道。 |
假設(shè)在我們的應(yīng)用中,有A、B、C三個(gè)頁(yè)面
在頁(yè)面 A 中:
const pageA = new BroadcastChannel('channel1')
pageA.postMessage('haha!')
在頁(yè)面 B 中:
const pageB = new BroadcastChannel('channel1')
在頁(yè)面 C 中:
const pageC = new BroadcastChannel('channel1')
pageC.onmessage = function (event) {
console.log(event.data)
pageC.postMessage('hello, i am here!')
}
這樣,頁(yè)面 A 、B 、C 都創(chuàng)建一個(gè)監(jiān)聽了 'channel1' 頻道的 BroadcastChannel 對(duì)象,它們之間可以通過(guò)這個(gè)對(duì)象實(shí)現(xiàn)互相通信。
當(dāng) pageA 發(fā)布了 'haha!' 消息時(shí),pageC 將收到一個(gè)消息事件,其 data 字段等于 'haha!',然后也向頻道中回復(fù)一條消息。注意:自己不會(huì)收到自己發(fā)的消息。
但是 pageB 并不會(huì)收到這些消息,因?yàn)樗麤](méi)有實(shí)現(xiàn)onmessage 方法,相當(dāng)于沒(méi)有接收頻道中的消息,所以他實(shí)際上不是一個(gè)訂閱者。
注意:在pageA銷毀channel當(dāng)前不與頁(yè)面context進(jìn)行上下文綁定,需要主動(dòng)關(guān)閉消息通道,如下所示:
const pageA = new BroadcastChannel('tom')
pageA.close();
更多建議: