位置: IT常识 - 正文

走进小程序【六】微信小程序架构之【视图层】万字详解(进入微信小程序)

编辑:rootadmin
走进小程序【六】微信小程序架构之【视图层】万字详解 文章目录🌟前言🌟小程序架构🌟视图层 View🌟WXML🌟数据绑定🌟列表渲染🌟条件渲染🌟模板🌟WXSS🌟尺寸单位🌟样式导入🌟内联样式🌟选择器🌟全局样式与局部样式🌟WXS🌟页面渲染🌟事件🌟什么是事件🌟事件的使用方式🌟使用WXS函数响应事件🌟事件详解🌟事件分类🌟普通事件绑定🌟绑定并阻止事件冒泡🌟互斥事件绑定🌟事件的捕获阶段🌟事件对象🌟BaseEvent 基础事件对象属性列表:🌟CustomEvent 自定义事件对象属性列表(继承 BaseEvent):🌟TouchEvent触摸事件对象属性列表(继承 BaseEvent):🌟type🌟target🌟currentTarget🌟dataset🌟mark🌟touches🌟Touch 对象🌟CanvasTouch 对象🌟CanvasTouch changedTouches🌟detail🌟WXS响应事件🌟背景🌟实现方案🌟使用方法🌟简易双向绑定🌟双向绑定语法🌟在自定义组件中传递双向绑定🌟在自定义组件中触发双向绑定更新🌟基础组件🌟什么是组件:🌟属性类型🌟公共属性🌟特殊属性🌟结语

推荐整理分享走进小程序【六】微信小程序架构之【视图层】万字详解(进入微信小程序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微信小程序从入门到实践,进入微信小程序,微信小程序从入门到实践,小程序入口都有哪些?你知道几个?,微信小程序从入门到实践,微信小程序从入门到实践,小程序如何进入,进入小程序的入口有,内容如对您有帮助,希望把文章链接给更多的朋友!

🌟前言

哈喽小伙伴们,上一期为大家讲解了一下小程序的架构之【逻辑层】篇。今天接着上篇,给大家结合官方文档讲解一下小程序的架构之【视图层】;今天的文章有点长,很多知识点也是官方文档给我们提供的;也是想告诉大家,总有一天我们进入职场后,会甩开我们的拐棍或者离开我们的靠山独自去面对困难; 所以养成阅读官方文档的好习惯对我们日后工作也有很大的好处。好了,让我们一起来看看吧🤘

🌟小程序架构

小程序开发框架的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生 APP 体验的服务。

整个小程序框架系统分为两部分:逻辑层(App Service)和 视图层(View)。小程序提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

View 层用来渲染页面结构,AppService 层用来逻辑处理、数据请求、接口调用。

它们在两个线程里运行。

视图层和逻辑层通过系统层的 JSBridage 进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理

视图层使用 WebView 渲染,iOS中使用自带 WKWebView,在 Android 使用腾讯的 x5内核(基于 Blink)运行。逻辑层使用在 iOS 中使用自带的 JSCore 运行,在 Android中使用腾讯的 x5 内核(基于 Blink)运行。开发工具使用 nw.js 同时提供了视图层和逻辑层的运行环境。🌟视图层 View

框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示。

将逻辑层的数据反映成视图,同时将视图层的事件发送给逻辑层。

WXML(WeiXin Markup language) 用于描述页面的结构。

WXS(WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。

WXSS(WeiXin Style Sheet) 用于描述页面的样式。

组件(Component)是视图的基本组成单元。

🌟WXML

WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。

要完整了解 WXML 语法,请参考WXML 语法参考。

用以下一些简单的例子来看看 WXML 具有什么能力:

🌟数据绑定<!--wxml--><view> {{message}} </view>// page.jsPage({ data: { message: 'Hello MINA!' }})🌟列表渲染<!--wxml--><view wx:for="{{array}}"> {{item}} </view>// page.jsPage({ data: { array: [1, 2, 3, 4, 5] }})🌟条件渲染<!--wxml--><view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view><view wx:elif="{{view == 'APP'}}"> APP </view><view wx:else="{{view == 'MINA'}}"> MINA </view>// page.jsPage({ data: { view: 'MINA' }})🌟模板<!--wxml--><template name="staffName"> <view> FirstName: {{firstName}}, LastName: {{lastName}} </view></template><template is="staffName" data="{{...staffA}}"></template><template is="staffName" data="{{...staffB}}"></template><template is="staffName" data="{{...staffC}}"></template>// page.jsPage({ data: { staffA: {firstName: 'Hulk', lastName: 'Hu'}, staffB: {firstName: 'Shang', lastName: 'You'}, staffC: {firstName: 'Gideon', lastName: 'Lin'} }})🌟WXSS

WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。

WXSS 用来决定 WXML 的组件应该怎么显示。 为了适应广大的前端开发者,WXSS 具有 CSS 大部分特性。同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。

走进小程序【六】微信小程序架构之【视图层】万字详解(进入微信小程序)

与 CSS 相比,WXSS 扩展的特性有:

尺寸单位样式导入🌟尺寸单位

rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。

如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px =1物理像素;

设备rpx换算px (屏幕宽度/750)px换算rpx (750/屏幕宽度)iPhone51rpx = 0.42px1px = 2.34rpxiPhone61rpx = 0.5px1px = 2rpxiPhone6 Plus1rpx = 0.552px1px = 1.81rpx

建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。 注意: 在较小的屏幕上不可避免的会有一些毛刺,请在开发时尽量避免这种情况。

🌟样式导入

使用@import语句可以导入外联样式表,@import后跟需要导入的外联样式表的相对路径,用;表示语句结束。

示例代码:

/** common.wxss **/.small-p { padding:5px;}/** app.wxss **/@import "common.wxss";.middle-p { padding:15px;}🌟内联样式

框架组件上支持使用 style、class 属性来控制组件的样式。

style:静态的样式统一写到 class 中。style 接收动态的样式,在运行时会进行解析,请尽量避免将静态的样式写进 style 中,以免影响渲染速度。 class:用于指定样式规则,其属性值是样式规则中类选择器名(样式类名)的集合,样式类名不需要带上.,样式类名之间用空格分隔。<view class="normal_view" />🌟选择器

目前支持的选择器有:

选择器样例样例描述.class.intro选择所有拥有 class=“intro” 的组件#id#firstname选择拥有 id=“firstname” 的组件element选择所有 view 组件element, elementview, checkbox选择所有文档的 view 组件和所有的 checkbox 组件::afterview::after在 view 组件后边插入内容::beforeview::before在 view 组件前边插入内容🌟全局样式与局部样式

定义在 app.wxss 中的样式为全局样式,作用于每一个页面。在 page 的 wxss 文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖 app.wxss 中相同的选择器。

🌟WXS

WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。

注意事项

WXS 不依赖于运行时的基础库版本,可以在所有版本的小程序中运行。WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。WXS 的运行环境和其他 JavaScript 代码是隔离的,WXS 中不能调用其他 JavaScript 文件中定义的函数,也不能调用小程序提供的API。由于运行环境的差异,在 iOS 设备上小程序内的 WXS 会比 JavaScript 代码快 2 ~ 20 倍。在 android 设备上二者运行效率无差异。

以下是一些使用 WXS 的简单示例,要完整了解 WXS 语法,请参考WXS 语法参考。

🌟页面渲染<!--wxml--><wxs module="m1">var msg = "hello world";module.exports.message = msg;</wxs><view> {{m1.message}} </view>

页面输出:

hello world

数据处理:

// page.jsPage({ data: { array: [1, 2, 3, 4, 5, 1, 2, 3, 4] }})<!--wxml--><!-- 下面的 getMax 函数,接受一个数组,且返回数组中最大的元素的值 --><wxs module="m1">var getMax = function(array) { var max = undefined; for (var i = 0; i < array.length; ++i) { max = max === undefined ? array[i] : (max >= array[i] ? max : array[i]); } return max;}module.exports.getMax = getMax;</wxs><!-- 调用 wxs 里面的 getMax 函数,参数为 page.js 里面的 array --><view> {{m1.getMax(array)}} </view>

页面输出:

5

🌟事件🌟什么是事件事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息,如 id, dataset, touches。🌟事件的使用方式在组件中绑定一个事件处理函数。 如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。<view id="tapTest" data-hi="Weixin" bindtap="tapName"> Click me! </view>在相应的Page定义中写上相应的事件处理函数,参数是event。Page({ tapName: function(event) { console.log(event) }})可以看到log出来的信息大致如下:{ "type":"tap", "timeStamp":895, "target": { "id": "tapTest", "dataset": { "hi":"Weixin" } }, "currentTarget": { "id": "tapTest", "dataset": { "hi":"Weixin" } }, "detail": { "x":53, "y":14 }, "touches":[{ "identifier":0, "pageX":53, "pageY":14, "clientX":53, "clientY":14 }], "changedTouches":[{ "identifier":0, "pageX":53, "pageY":14, "clientX":53, "clientY":14 }]}🌟使用WXS函数响应事件

从基础库版本2.4.4开始,支持使用WXS函数绑定事件,WXS函数接受2个参数,第一个是event,在原有的event的基础上加了event.instance对象,第二个参数是ownerInstance,和event.instance一样是一个ComponentDescriptor对象。具体使用如下:

在组件中绑定和注册事件处理的WXS函数。<wxs module="wxs" src="./test.wxs"></wxs><view id="tapTest" data-hi="Weixin" bindtap="{{wxs.tapName}}"> Click me! </view>

注:绑定的WXS函数必须用{{}}括起来

test.wxs文件实现tapName函数function tapName(event, ownerInstance) { console.log('tap Weixin', JSON.stringify(event))}module.exports = { tapName: tapName}

ownerInstance包含了一些方法,可以设置组件的样式和class,具体包含的方法以及为什么要用WXS函数响应事件,请点击查看详情。

🌟事件详解🌟事件分类

事件分为冒泡事件和非冒泡事件:

冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

WXML的冒泡事件列表:

类型触发条件最低版本touchstart手指触摸动作开始touchmove手指触摸后移动touchcancel手指触摸动作被打断,如来电提醒,弹窗touchend手指触摸动作结束tap手指触摸后马上离开longpress手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发1.5.0longtap手指触摸后,超过350ms再离开(推荐使用longpress事件代替)transitionend会在 WXSS transition 或 wx.createAnimation 动画结束后触发animationstart会在一个 WXSS animation 动画开始时触发animationiteration会在一个 WXSS animation 一次迭代结束时触发animationend会在一个 WXSS animation 动画完成时触发touchforcechange在支持 3D Touch 的 iPhone 设备,重按时会触发1.9.90

注:除上表之外的其他组件自定义事件如无特殊

本文链接地址:https://www.jiuchutong.com/zhishi/300654.html 转载请保留说明!

上一篇:若依框架前端Vue项目分析实战(若依框架前端发请求)

下一篇:Redux的基本使用过程详解(redux入门教程)

  • 荣耀x10有密码保险箱功能吗(荣耀x10有密码保护吗)

    荣耀x10有密码保险箱功能吗(荣耀x10有密码保护吗)

  • 华为p40pro能支持3D人脸解锁吗(华为p40pro可以装4g卡吗)

    华为p40pro能支持3D人脸解锁吗(华为p40pro可以装4g卡吗)

  • 微信登录微博会被好友知道吗(微信登录微博会被发现吗)

    微信登录微博会被好友知道吗(微信登录微博会被发现吗)

  • 全民k歌网络错误是怎么回事(全民k歌网络错了怎么办)

    全民k歌网络错误是怎么回事(全民k歌网络错了怎么办)

  • 淘宝不付款多久取消订单(淘宝不付款多久失效)

    淘宝不付款多久取消订单(淘宝不付款多久失效)

  • 抖音怎么设置不在线状态(抖音怎么设置不让别人评论我的作品)

    抖音怎么设置不在线状态(抖音怎么设置不让别人评论我的作品)

  • 快手极速版如何自动播放下一个视频(快手极速版如何快速赚钱)

    快手极速版如何自动播放下一个视频(快手极速版如何快速赚钱)

  • iOS 微信把地区改任意文字(怎样把微信地区关掉苹果手机)

    iOS 微信把地区改任意文字(怎样把微信地区关掉苹果手机)

  • 美团众包永久封禁,还能解封吗(美团众包永久封号了,注销账号了,重新注册可以解封吗)

    美团众包永久封禁,还能解封吗(美团众包永久封号了,注销账号了,重新注册可以解封吗)

  • 怎么在电脑上写电子版的文章(番茄小说怎么在电脑上写)

    怎么在电脑上写电子版的文章(番茄小说怎么在电脑上写)

  • 小电充电宝买了可以退吗(小电充电宝买了怎么不可以充电)

    小电充电宝买了可以退吗(小电充电宝买了怎么不可以充电)

  • 手机卡激活了就开始扣费吗(手机卡激活了就扣费吗)

    手机卡激活了就开始扣费吗(手机卡激活了就扣费吗)

  • ipad充电没反应黑屏(ipad充电没反应也没闪电标志)

    ipad充电没反应黑屏(ipad充电没反应也没闪电标志)

  • 云充吧可以跨省异地还吗(云充吧可以异地归还吗)

    云充吧可以跨省异地还吗(云充吧可以异地归还吗)

  • 拼多多可以做一件代发货吗(拼多多做一件代发怎么做)

    拼多多可以做一件代发货吗(拼多多做一件代发怎么做)

  • 退款卖家还要输密码吗(卖家退款非要姓名吗)

    退款卖家还要输密码吗(卖家退款非要姓名吗)

  • 网易云有访客记录吗(网易云有访客记记录吗)

    网易云有访客记录吗(网易云有访客记记录吗)

  • word怎么做条形码(word怎么做条形统计图并标上数值)

    word怎么做条形码(word怎么做条形统计图并标上数值)

  • 微博手机号不用了怎么更换绑定手机(微博手机号不用了,怎么找回那个微博账号)

    微博手机号不用了怎么更换绑定手机(微博手机号不用了,怎么找回那个微博账号)

  • 荣耀r5和i5区别(荣耀笔记本r5和i3区别)

    荣耀r5和i5区别(荣耀笔记本r5和i3区别)

  • 系统总线中控制线的功能是(系统总线控制板的作用)

    系统总线中控制线的功能是(系统总线控制板的作用)

  • countif和countifs的区别(countifs和countif的区别)

    countif和countifs的区别(countifs和countif的区别)

  • 使用情况统计数据(数据使用情况)

    使用情况统计数据(数据使用情况)

  • 家里路由器怎么改密码(家里路由器怎么控制家庭路由器)

    家里路由器怎么改密码(家里路由器怎么控制家庭路由器)

  • 银行转账记录能保存多久
  • 建筑公司预收了款项已经开了增值税发票怎么做账
  • 总分机构 分总机构
  • 2020劳务退税怎么退
  • 计提残疾人保障金会计分录
  • 企业所得税不征税收入
  • 公司开业前期费用处理
  • 养老金余额退休能取吗
  • 处置固定资产增值税税率
  • 电信话费可以开公司发票吗
  • 2017年广告费税率
  • 购进旅客运输服务为什么不能抵扣进项税额
  • 个贷系统平账专户还款怎么做分录
  • 企业收到进项发票
  • 企业所得税资产总额怎么算出来的呢
  • 小规模纳税人增值税政策
  • 固定资产审计目标
  • 个人有形动产租赁
  • 收到个税返还手续费怎么开发票
  • 发出商品发生损失
  • 全资的子公司
  • 飞机票可以直接去机场买吗
  • 增值税专用发票和普通发票的区别
  • 免税出口样品收多少税
  • 政府搬迁补偿款不够建房怎么办
  • 企业注销时还有应付职工薪酬怎么办
  • 政府补助资金使用范围及管理方法
  • 有限公司股权转让怎么办理流程
  • php执行linux脚本
  • 垃圾清运费属于什么服务
  • php面向对象的三大特征
  • django pypi
  • 稚晖君的学历
  • vue使用计算属性声明在什么配置项中
  • mtd命令
  • php封装数据库操作
  • lvs命令
  • 床垫可以开专票抵扣吗
  • 深入了解jvm
  • 公司购买办公家具可以抵扣吗
  • 收到汽车会计分录
  • 员工预支款项及报销流程
  • 收入成本怎么做账
  • 其他收益包含
  • 过路费报销计入什么科目
  • 盈利和亏损怎么计算
  • 交易性金融资产公允价值变动怎么算
  • 金税四期视频
  • 应交税费主要有什么税
  • 现金支付无发票怎么报销
  • 存货跌价准备确认损失分录
  • 存货科目计算公式是什么
  • 赔付支出包括
  • 发放外单位人员劳务费需要在发放表上签字吗
  • 销售单位收入和税收
  • 科技经费使用
  • 建筑工程行业前景
  • 数据库预处理语句
  • mysql命令行导出结果
  • 海量数据存储和查询
  • win2003自动关机
  • .exe是什么意思
  • mac启动快捷键
  • mac的mail登不上
  • 退出清理磁盘
  • linux各种重定向及其含义
  • win8外接显示器没反应怎么办
  • java iterate()用法
  • 批处理应用实例
  • 简单强悍是哪首歌
  • html label标签的使用教程
  • IE hack条件写法
  • [置顶]星陨计划
  • unity3d 使用Quaternion 类实现两个简单功能
  • jQuery AJAX timeout 超时问题详解
  • 不同地区的社保卡通用吗
  • 支付境外服务费需要缴纳哪些税费
  • 加油站怎么收税
  • 青岛税税通怎么切换企业
  • 开普票需要提供合同吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设