位置: 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入门教程)

  • 苹果11pro max与苹果11pro区别(苹果11pro max与苹果11的区别)

    苹果11pro max与苹果11pro区别(苹果11pro max与苹果11的区别)

  • 服务器人数上限是多少(服务器人数过多崩溃)

    服务器人数上限是多少(服务器人数过多崩溃)

  • 访问空间删除访问记录对方能看到吗(删除访问空间会有记录留下吗)

    访问空间删除访问记录对方能看到吗(删除访问空间会有记录留下吗)

  • ipad怎么让一个app不联网(ipad怎么让一个app打不开)

    ipad怎么让一个app不联网(ipad怎么让一个app打不开)

  • m1806d9pe是小米平板几(小米m1806d9e是什么型号)

    m1806d9pe是小米平板几(小米m1806d9e是什么型号)

  • 开发者选项能一直开吗(开发者选项能一键删除吗)

    开发者选项能一直开吗(开发者选项能一键删除吗)

  • 手机号在哪买(手机号在哪买便宜)

    手机号在哪买(手机号在哪买便宜)

  • 为什么soul发的瞬间别人看不到(为什么soul发的瞬间没人点赞)

    为什么soul发的瞬间别人看不到(为什么soul发的瞬间没人点赞)

  • 阿里巴巴自行发货是什么意思(阿里巴巴自行发货已发货怎么发)

    阿里巴巴自行发货是什么意思(阿里巴巴自行发货已发货怎么发)

  • 苹果xr怎么有的重有的轻(苹果xr为什么是真香机)

    苹果xr怎么有的重有的轻(苹果xr为什么是真香机)

  • 为什么pr导出的视频很大(为什么pr导出的不是mp4)

    为什么pr导出的视频很大(为什么pr导出的不是mp4)

  • 手机换机微信聊天记录怎么转移(手机换机微信聊天记录还在吗)

    手机换机微信聊天记录怎么转移(手机换机微信聊天记录还在吗)

  • 拼多多好评置顶是什么意思(拼多多好评置顶在哪里查看)

    拼多多好评置顶是什么意思(拼多多好评置顶在哪里查看)

  • 苹果接口检测到有液体怎么办(苹果接口检测到液体继续充电)

    苹果接口检测到有液体怎么办(苹果接口检测到液体继续充电)

  • 储存限制是什么意思(储存权限被禁用怎么办)

    储存限制是什么意思(储存权限被禁用怎么办)

  • macbook为啥充不了电(mac book为什么充不进去电)

    macbook为啥充不了电(mac book为什么充不进去电)

  • 华为p30pro怎么换手机卡(华为p30pro怎么换电池)

    华为p30pro怎么换手机卡(华为p30pro怎么换电池)

  • 任务栏如何恢复默认值(任务栏怎么还原到桌面)

    任务栏如何恢复默认值(任务栏怎么还原到桌面)

  • 微信记录删除了怎么恢复(微信记录删除了警方能调出来吗)

    微信记录删除了怎么恢复(微信记录删除了警方能调出来吗)

  • 红米手机如何连接电脑传照片(红米手机如何连接u盘)

    红米手机如何连接电脑传照片(红米手机如何连接u盘)

  • iphone怎么换购(苹果怎么换购)

    iphone怎么换购(苹果怎么换购)

  • v1829a是什么手机(v1820b是什么手机)

    v1829a是什么手机(v1820b是什么手机)

  • 户户通老显示正在升级(户户通放一会出现异常1)

    户户通老显示正在升级(户户通放一会出现异常1)

  • 在win10中,怎么解决开机要输入用户密码?(在win10中怎么从edge旧ie浏览器)

    在win10中,怎么解决开机要输入用户密码?(在win10中怎么从edge旧ie浏览器)

  • 总账套打
  • 饭店开业几年后可以申请升级
  • 工会经费按什么交
  • 企业违约金收入会计分录
  • etc充值怎么操作
  • 个体办税务登记需要带什么
  • 合伙企业注销流程图
  • 长期挂账应付款的审计
  • 企业充值是什么意思
  • 钱汇错需要退回应该怎么做分录?
  • 预付的账款属于
  • 企业一直零申报印花税
  • 关于现代服务业的书籍
  • 建筑施工企业购进材料会计分录
  • 不得抵扣啥意思
  • 自由职业者知乎
  • 加计扣除需要注意的几大风险点
  • 坏账核销谁来审批
  • 银行手续费做账漏掉
  • 供应商质量问题通知函范文
  • doc文档隐藏
  • linux的pipe
  • mac怎么转到苹果系统
  • win10任务栏变成黑色
  • PHP:Memcached::prependByKey()的用法_Memcached类
  • PHP isset()与empty()的使用区别详解
  • 个体户要交哪些税怎么交
  • php抓取
  • 酒店原材料内部分析
  • php连接数据库实现登录注册
  • php如何防止后门
  • 核电站弃置费用怎么算
  • 违约金开什么票据
  • laravel orm使用
  • php静态方法可以被继承吗
  • sar参数设置4个数
  • 交易性金融资产的入账价值
  • 小规模纳税人无进项票怎么办
  • 公司盖厂房没有票要交税吗?
  • 织梦怎么安装
  • DEDECMSV5.6将软件下载次数直接生成静态
  • 季中转一般纳税人申报了小规模后无法勾选认证
  • 终止劳动合同赔偿金最晚多久发放
  • 未确认融资费用摊销额怎么计算
  • 开具红字增值税普通发票
  • 一般纳税人和小规模纳税人的区别
  • SQL Server实现split函数分割字符串功能及用法示例
  • sql server的sql语句
  • 企业转移地点剩余房产
  • 计提福利费的会计分录
  • 一般纳税人销售旧货
  • 高危险工作人员有什么意外险
  • 借款利息应计入
  • 红字更正法和红字冲销
  • 超期未备案可以投诉么
  • 收到国税退税收怎么做账
  • 小规模纳税人年收入不能超过多少
  • 个人开具发票需要税号吗?
  • 加油票抬头开错了
  • 会计凭证的粘贴顺序
  • 备查账包括哪些
  • 会计凭证的主要种类
  • mysql 从库
  • 数据库分页存储方法
  • mysql很卡
  • win8系统手机
  • bios怎么调高性能
  • avserve2.exe是什么东东
  • linux文本模式无法打字
  • 845主板支持1t硬盘吗
  • 如何在linux中安装软件
  • win7怎么操作
  • [置顶]bilinovel
  • unity打包64位出错
  • jquery设置禁用
  • 什么绑定什么服务
  • 爬虫如何识别验证码
  • android进阶书籍
  • 安阳市灵活就业人员社保补贴
  • 北京朝阳区地税局地址电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设