快应用开发脚手架搭建

1.快应用脚手架 hap-toolkit 搭建
npm i hap-toolkit -g 全局搭建
检查版本 hap-v
2.创建工程
hap init <工程名称>不能使用中文字符
npm i 来装依赖
3.工程目录
(1)src 源代码
(2)sign 签名文件 ****
(3)build 编译临时文件
(4)dist 产出文件(rpk文件) 运用手机调试器 打开rpk文件 可以查看快应用
4.开发调试器
npm run server
npm run watch 自动编译 监视代码改变 随时推送
5.manifest.json
快应用配置文件
1.package - 应用包名
2.name 应用名称
3.router -页面路由
manifest的修改需要 重新 build 才能修改 watch命令不会监听manifest的改变
5.页面
(1)快应用程序由无数个页面组成,
(2)ux文件
<1>template
<2>style
<3>script
三部分组成 ux文件
6.调试
谷歌自带调试器
运用console.log进行输出调试
但是运用console.log进行调试需要对manifest.json中的config文件进行配置
将 其配置为


{
"config": {
"logLevel": "debug"
}
}


只有这样才能 进行console.log输出不然console.log无法使用
7.快应用模版
template
由组件组成
原声组件,不是htmlelement
(1)容器组件 -div list stack ...
(2)基础组件 -a image text ...
(3)表单组件 -input select switch ...
(4)其他组件 -video web canvas ...
官方文档
(https://doc.quickapp.cn/widgets/common-events.html)

8.组建的嵌套
每一个标签是一个DOM节点

9.自定义组件
(1)用于模块化管理
(2)也是基于ux文件
(3)包含了独立的模版、样式、脚本

引入方式
(1)<import>标签引入
src 指定ux文件地址
name属性指定自定义组件的名称
<import src="" name=""></import>
***组件中也可以调用组件****

****注意事项
文本内容只能放在 text a span组件中 否则无法显示

10.样式介绍
类css语言
只提供的部分css属性的支持
(1)常见样式
width height margin padding color ...... 等等
选择器 id class tag 后代 多元素选择器(,) 后代直接选择器(>)
(2)选择器优先级
与css一致
父子组件不支持父子组件的继承

11.尺寸单位
(1)百分比
(2) px
不支持 rem em

快应用的自适应方式:
****基准宽度 默认(750px)
在 manifest.json的 config的 designWidth进行修改基准宽度,如果config中没有designWidth,则默认 基准宽度 为750px。

设计稿尺寸实现
1.直接修改基准宽度
2.换算尺寸
设计稿尺寸/设计稿宽度=样式尺寸/基准宽度
例子 基准宽度 :750
设计稿宽度:1080
设计稿尺寸:800
样式尺寸:800/1080*750约等于556

支持预编译样式
1.sass
2.less
npm i node-sass --save
npm i sass-loader --save
<style lang="sass"></style>

12.盒模型
(1)border-box模型
(2)尺寸包含border宽度
(3)不支持content-box模型 和 box-sizing 属性

13.定位
(1)position属性只支持 none/fixed
(2)如果想使用absolute定位 只能使用stack标签组件
stack组件的子组件都是相对stack本身定位叠加在一起的

14.布局
(1)不支持float
(2)flex布局
(3)display:none/flex

15.脚本
实现程序逻辑
es6标准
可调用接口
但是调用接口前 需要在manifest的feature字段中声明,然后通过import导入

16.viewModel(vm)
(1)Model-View-ViewModel(MVVM)
(2)每个ux对应一个VM实例
(3)以模版为View在脚本中构建
(4)通过脚本中的export default输出实例并运行

17.页面组件与自定义组件
(1)都有各自的VM实例
(2)VM可以嵌套

18.VM的API
(1)this.element('id')-获取指定DOM节点 (2)this.child('id')-获取指定自定义组件VM
(3)this.parent()-获取父级VM (4)this.root()-获取顶层VM
。。。

19.页面生命周期回调
1.onlnit-数据驱动完成
2.onReady-渲染完成
3.onDestroy-跳转离开
。。。等等

页面对象(page) this.page.setTitleBar()-修改标题栏

页面对象属性
1.this.$valid - 页面对象是否可用

2.this.$visible -页面对象是否可见

  1. app.ux文件
    (1)不能改名、移动或者删除
    (2)不包含模版和样式,只有脚本
    (3)不构建VM实例
    (4)用来存放应用中的公共对象
    应用对象(app) (1)this.app.def - app.ux的export default (2)this.app.$data - manifest.json 的 config.data
    应用生命周期回调
    1.onCreate -应用创建的回调
    2.onDestroy -应用退出销毁时的回调

21.声明 绑定数据
(1)声明数据模型
在 private:{
title:'Hello,world!'
}
中声明数据

(2)绑定输出
<text>{{title}}</text>
<image src={{imaPic}}></image>
<text>{{isGood?'好':'不好'}}</text>
条件输出
<div if={{isShow}}></div>
<div show={{isShow}}></div>
if 是直接移除 配套 else;else if
show 相当于注释

列表渲染
(1)for="{{arrayData}}" 默认 value=item index=idx
(2)for="{{value in arrayData}}" -自定义元素名
(3)for="{{(index,value) in arrayData}}" -自定义索引名和元素名

22.页面跳转与数据传递
(1)跳转方式
<1>a标签 href可以用来进行跳转,可以直接把要传对参数写在 href对属性值中,(?key=value)
<2>router.push
uri跳转路径
params参数
例子:router.push ({
uri: '/DemoDetail',
params:''
})

(2)跳转路径
1.页面名称
2.页面路径
3.斜杠(/)如果路由表中没有配置这个路径,会跳转到首页
4.包含schema对完整uri
带有schema的uri会首先使用默认策略
(1)默认策略(http、https、internal)
http、https会打开外部网页,但是要接入webvue接口
(2)internal会根据文件类型调用系统中的应用打开文件
如果默认策略不好用,会尝试系统应用来打开文件,如果还是不行,则会自动抛弃此文件

23.页面栈
(1)通过页面跳转打开新页面旧页面不会关闭
(2)压入栈中
如果使用 router.push进行页面跳转,则可以使用router.back()跳回上一个页面;
也可以使用router.replace方法替换掉当前页面方式来打开新页面;
router.clear()强行关闭页面栈。

24.页面跳转参数
(1)新页面中接收参数时,构建VM声明要接收的参数名称
(2)需要使用合适的数据模型来接收参数
页面数据模型
影响传入数据的覆盖机制
(1)public - 允许被应用外请求时的数据覆盖
(2)protected - 只允许被应用内请求时的数据覆盖
(3)private - 只允许在VM内部操作
有三种模型的原因:
(1)页面级组件可以接受来自引用外部数据
(2)提高数据安全性

25.自定义组件数据传递
自定义组件数据模型 只有 data一种属性
自定义组件接收参数 props
父组件向子组件传递数据:
父级:<comp-part1 prop1="{{data1}}" prop2-object="{{data2}}"></comp-part1>
子级:export default{
props:[
"prop1",
"prop2object"
]
}

26.事件监听
(1)原生组件事件
原生组件上的用户行为反馈到脚本里的方式
如何监听组件事件


WeChatd58710011c5f8d3587b1cd0a60c8f4bb.png

原生组件事件
1.click-点击 2.longpress -长按 3.appear -出现 等等
触发事件时 响应的函数不管有没有指定参数 都会在参数列表末尾加上 event参数
除了手动触发 也可以通过在VM中 使用
this.element('id').emitElement('click') 来主动触发

ViewModel事件
vm中用户自定义的事件
监听
可以通过this.on来进行监听 例:this.on('customEvent1',this.fnHandler1)
当customEvent1触发时,会执行this.fnHandler1
触发
this.emit('customEvent1') 移除 this.off('customEvent1',this.fnHandler1')
可以移除 this.fnHandler1响应

由于VM存在嵌套关系
所有
可以使用 this.dispatch('customEvent1')向父级发送事件 可以使用this.broadcast("customEvent1")向子级发送事件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容