wxml如何转换为HTML,理解小程序

小程序坚持着 “无需下载、触手可及、用完即走”的设计理念和价值观,帮助用户缩短完成任务的时间。下面从以下几点进行总结。

总结是参考三清水老师的小册子,推荐大家去购买。写的很棒。

1. 小程序能做什么,不能做什么?

bVbhvQ6?w=679&h=480

2. 小程序的执行环境

微信小程序是在微信的上下文中运行的,而不是在浏览器中运行的,所以浏览器特有的window对象、BOM和DOM等相关的API都不能使用。

同时,跟浏览器相关的操作,Cookie、Ajax请求(XMLHttpRequest)、DOM选择器、DOM事件、路由history、缓存、设备信息、位置等都不存在。

但是,微信小程序为我们提供了一套自己的API。

3. 小程序的布局信息

微信小程序中使用rpx作为长度单位,可以根据屏幕宽度进行自适应。

rpx是以小程序容器宽度 === 设备宽度 == 屏幕宽度 === 750rpx来做定义的。

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

官方iPhone手机尺寸对照表格

bVbhCJY?w=995&h=239

建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准

4. 微信小程序与H5对比

在微信小程序中,一切皆组件(视图组件)。

bVbhCK3?w=598&h=305

运行环境

普通H5都是执行在浏览器的宿主环境,浏览器提供window、document等BOM对象;但是小程序是运行在微信上下文中的,没有BOM和DOM。因此在小程序中不能使用BOM 和DOM 提供的接口

路由

H5是通过URL进行访问的,小程序没有对外暴漏统一的URL路径进行访问。小程序是通过信道服务进行通信和会话管理,所以它不支持Cookie存储,访问资源使用 wx.request 而不是 ajax 的 xmlhttprequet API,小程序的 wx.request 请求不存在跨域的问题。

bVbhCMv?w=709&h=503

bVbhCMP?w=988&h=561

注意:

不要尝试修改页面栈,会导致路由以及页面状态错误

不要在 App.onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成

bVbhCMY?w=587&h=178

模块化

微信小程序在JS模块化上支持CommonJs,通过require加载,跟node.js类似。

样式

微信小程序的页面样式完全继承了CSS语法,支持FLEX布局

框架

微信小程序的整体框采用面向状态编程方式,状态管理从API来看采用类似Redux的设计方式;

单项数据绑定方式,当view在action操作后,只能通过action的业务处理来更新view。

5.小程序框架

bVbhCQ4?w=628&h=349

微信小程序分为视图层和逻辑层,视图层在webview中渲染,主要负责页面的渲染工作,其中视图可以有多个,目前最多10个;

逻辑层在jscore中进行渲染,负责逻辑处理、全局状态管理、请求和接口调用,逻辑层全局只有一个(实际通过X5内核,另起一个JScore线程)。

微信小程序的视图层和逻辑层通过微信的JSBridge来实现通信。

逻辑层数据变化通过JSBridge通知视图层,视图层进行更新处理。视图层触发事件通过JSBridge将事件通知到逻辑层,逻辑层进行处理;

JSBridge提供的方法有invoke(调用native)、publish(消息分发)和subscribe。

因为在一个小程序中可以打开多个视图层(webview),要保证从逻辑层发送的数据可以准确送到具体的某个webview中,

需要通过每webview 唯一标识符webviewID来实现。发送event的时候携带webviewID,然后逻辑层处理完对应的逻辑,

如果需要下发数据,则通过webviewID找到对应的webview。

6.小程序生命周期

小程序在启动时,会同时启动两个线程,一个负责页面渲染的webview,一个负责逻辑jscore。

逻辑层初始化后会将初始化数据(app.js中的global)通过JSBridge传递给渲染层进行渲染,渲染层webview渲染完页面之后又会跟逻辑层通信。

7.小程序WXML怎么转成HTML

WXML写完之后经过编译工具WCC转成可执行的JS。wcc和wcsc是小程序的wxml和wxss的编译工具,是二进制文件。

这个JS会接受一个path,将path的页面转换成一个virtual DOM。

这个virtual DOM 结构里面就会找到以 wx-*开头的tag,有了这个VDOM结构,就可以使用对应的tag创建HTML片段了。

bVbhCVx?w=756&h=124

以上内容主要是参看三清水老师的小册子写的。觉得写的不错,大家也可以去购买一起学习交流谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
插件地址:https://github.com/kevenfeng/html-to-wxml如果前端技术比较牛,可以直接看github上面的demo。可以更好的理解用法。使用方法:1.引用插件var R_htmlToWxml = require(‘../../util/htmlToWxml.js’);//引入公共方法2.将html内容转成json数据R_htmlToWxml.html2json(“html内容”);转换后的json格式类型大概如下:3.吐到页面中显示<block wx:for="{{content}}"  wx:for-index="idy"  wx:for-item="cellData">         <block  wx:if="{{cellData.type == 'view'}}">             <view class="p">                 <block  wx:for="{{cellData.child}}" wx:key="text">                     <block  wx:if="{{item.type == 'a'}}">                         <text class="a" data-seccode="{{item.attr['data-seccode']}}" data-secname="{{item.attr['data-secname']}}" bindtap="stockClick">{{item.text}}</text>                     </block>                     <block  wx:else>                         <text>{{item.text}}</text>                     </block>                 </block>             </view>         </block>         <block wx:if="{{cellData.type == 'img'}}">             <image class="img" data-index="{{idy}}" style="height: {{cellData.attr.height?cellData.attr.height:0}}px"  mode="aspectFit" src="{{cellData.attr.src}}" bindload="imageLoad"></image>         </block>     </block>demo效果:由于小程序图片的高度没法自适应,需要给图片设置高度,所以需要在图片加载完以后,获取图片高度,等比算出显示图片高度,赋值给对应图片通常我们抓取的内容是html页面,特别是像资讯这一类的,如果在小程序里面显示文章内容,此插件提供了一种解决方案,希望对大家有用。在客户端中用native显示html页面体验上面没有native的好,htmlToWxml插件给客户端中用native的方式显示html内容提供了一种解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值