1.微信小程序的优势和劣势
优势
-
微信助理,容易推广。在微信中,小程序拥有众多入口,例如附近的小程序、小程序码、分享、发现-小程序等五十多个的入口。这些入口有助于企业更好的获取流量,从而进行转化、变现。
-
使用便捷。用户在使用小程序时,只需要轻轻点一下就可以使用,更加符合用户对使用方便、快捷的需求,所以小程序的用户数量不断增加。
-
体验良好,有接近原生app的体验。在微信生态里,小程序在功能和体验上是可以秒杀掉 H5 页面的,H5 页面经常出现卡顿、延时、加载慢、权限不足等原因,而这些问题在小程序里都不会出现。
-
成本更低,从开发成本到运营推广成本,小程序的花费仅为APP的十分之一,无论是对创业者还是传统商家来说都是一大优势。
不足
Node中的JS:
小程序中的JS:
小程序目前可以运行在三大平台:
8. 小程序中的数据渲染
小程序和浏览器中有什么不同
浏览器中渲染是单线程的。
而在小程序中的运行环境分成渲染层和逻辑层,第2章提到过 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。
小程序中js的模块化
在小程序中实现JS模块化,和node中、ES6中是一致的,大家还可以使用之前的方式进行JS的模块化编程。
小程序中js的加载执行顺序
小程序的执行的入口文件是 app.js 。并且会根据其中 require 的模块顺序决定文件的运行顺序。
案例:JS文件模块化
小程序中js的执行环境
-
单个包大小限制为2M,这导致无法开发大型的应用,采用分包最大是20M(这个值一直在变化,以官网为准)。
-
需要像app一样审核上架,这点相对于H5的发布要麻烦一些。
-
处处受微信限制。例如不能直接分享到朋友圈,涉及到积分,或者虚拟交易的时候,小程序也是不允许的。
-
2. 项目的目录结构
-
pages:
-
wxml: 编写小程序界面结构的地方
-
wxss: 编写小程序样式的地方
-
json:编写界面配置的地方
-
js:编写界面逻辑的地方
-
-
utils: 编写工具类的地方
-
app.js:创建程序实例的位置
-
app.json: 编写全局配置地方
-
app.wxss: 编写全局样式的地方
-
project.config.json: 项目的配置文件
-
sitemap.json:配置哪些网站可以被检索到
-
逻辑渲染
WXML 中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块:
<view wx:if="{{condition}}"> True </view>
使用 wx:elif 和 wx:else 来添加一个 else 块:
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>
因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个 <block/> 标签将多个组件包装起来,并在上边使用 wx:if 控制属性。
<block wx:if="{{true}}">
<view> view1 </view>
<view> view2 </view>
</block>
除此之外微信小程序还可以通过hidden属性进行条件渲染。wx:if在不满足条件的时候会删除掉对应的DOM,hidden属性则是通过display属性设置为none来进行条件渲染。
<view hidden="{{condition}}">
隐藏</view>
-
7. 小程序中的JS
小程序中的js和浏览器中和node中的区别
浏览器中JS:
-
ES
-
DOM
-
BOM
-
ES
-
NPM
-
Native
-
ES
-
小程序框架
-
小程序API
-
iOS平台,包括iOS9、iOS10、iOS11
-
Android平台
-
小程序IDE
阻止事件冒泡
在小程序中除了通过bind之外,还可以通过catch进行事件绑定,通过catch绑定的事件不会触发事件冒泡。
事件捕获
事件的触发分为两个阶段,首先是捕获阶段,其次是冒泡阶段。默认情况下事件都是在冒泡阶段触发。如果希望事件可以在捕获阶段触发,可以通过capture-bind进行事件绑定。
事件传参
在小程序中进行事件传参不能像传统的Web项目中一样,在括号里写参数。在小程序中需要在标签上通过data-方式定义事件所需的参数。
<!-- data-参数名=’参数值’ -->
<view bindtap="handleTap" data-msg="我是事件的参数">点击事件</view>
每个事件回调触发时,都会收到一个事件对象,通过这个对象可以获取路由传递的参数。
handleTap(e){
console.log("执行了点击事件");
// 通过currentTarget中的dataset属性可以获取时间参数
console.log(e.currentTarget.dataset.msg);
}
关于这个事件对象其他属性
type 事件类型
timeStamp 页面打开到触发事件所经过的毫秒数
这里需要注意的是target和currentTarget的区别,currentTarget为当前事件所绑定的组件,而target则是触发该事件的源头组件。
-
-
target 触发事件的组件的一些属性值集合
-
currentTarget 当前组件的一些属性值集合
-
detail 额外的信息
-
touches 触摸事件,当前停留在屏幕中的触摸点信息的数组
-
changedTouches 触摸事件,当前变化的触摸点信息的数组
-