前段时间比较流行的微信小程序,因为一直没有所谓内测码也没具体关注。拖到现在正好借组内分享的时机来仔细了解一下微信小程序。了解一个新的事物无外乎从是什么(本质),怎么用(具体用法),为什么用(优缺点)来学习,首先分析一下微信小程序是什么,听起来比较高大上,说实话原来我确实挺疑惑,到底这一套是什么开发机制,native?hybrid?纯h5?看网上各种教程上来就说api说语法,感觉不先理清楚是什么的问题就去搬api过来纯粹是耍流氓。

一、微信小程序是什么:
言归正传,微信小程序的本质是什么?个人理解微信小程序本质还是一套前端框架,微信团队基于原来第三方h5页面在微信里只能通过h5实现原本可以由native实现的功能,例如上传图片等。进而采取的开放部分jsbridge的api来方便开发者。不过既然作为大厂肯定不会仅仅开放部分jsbridge的api就完了,顺便微信类似vue、react一样实现了一套自己的mvvm的框架就是目前的微信小程序。官方文档这样描述:框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以让开发者可以方便的聚焦于数据与逻辑上。
本质还是一套前端框架,代码最终将会打包成一份 JavaScript并在小程序启动的时候运行,直到小程序销毁。模版语法类似vue,接近原生的自定义标签。数据绑定和渲染类似vue的语法,不过是以wx:开头(vue 以v: 作为标识) 事件系统类似react一样定义了一套自己的事件系统。
二、微信运行环境:
微信小程序运行在三端:iOS、Android 和 用于调试的开发者工具
在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中
在 Android 上,小程序的 javascript 代码是通过 X5 内核来解析
在 开发工具上, 小程序的 javascript 代码是运行在 nwjs(chrome内核) 中
页面的脚本逻辑是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能在脚本中使用window等bom对象。所以类似jquery、zepto等通过window或者document来获得dom对象的库是不能用来使用的。
三、目录结构:
小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。
一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:
app.js 逻辑部分,即全局变量或者方法
app.json 公共配置,包括页面配置等,顶部底部tab的设置,背景颜色等
app.wxss 公共样式表 可以被具体page样式覆盖
app.js代码(代码取自微信官方demo)和注释说明如下:
//app.js
// 微信小程序就是调用微信开放jsbridge,来完成微信h开发中某些原本比较难的功能的特定的微信前端框架
/**
* app 即小程序的生命周期管理。
* */
App({
// 初始化
onLaunch: function () {
//调用API从本地缓存中获取数据
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
},
// 全局方法或者变量,可在不同page中使用
getUserInfo:function(cb){
var that = this
if(this.globalData.userInfo){
typeof cb == "function" && cb(this.globalData.userInfo)
}else{
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData:{
userInfo:null
}
})
app.json(文件中不允许有注释)示例如下:
{
"pages":[
"pages/index/index",
"pages/logs/logs",
"pages/swiper/swiper",
"pages/input/input",
"pages/form/form"
],
"window":{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信小程序",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
},
"tabBar":{
"borderStyle": "white",
"list": [{
"pagePath": "pages/index/index",
"iconPath":"image/icon_API.png",
"selectedIconPath":"image/icon_API_HL.png",
"text": "首页"
},{
"pagePath": "pages/form/form",
"iconPath":"image/plus.png",
"selectedIconPath":"image/green_tri.png",
"text": "更多"
}, {
"pagePath": "pages/swiper/swiper",
"iconPath":"image/icon_COM.png",
"selectedIconPath":"image/icon_COM_HL.png",
"text": "其他"
}
]
}
}
具体页面一般包括一下文件(与全局文件类似,不过仅仅作用于该页面):
为了方便开发者减少配置项,规定描述页面的这四个文件必须具有相同的路径与文件名。
也就是说,我们不用指定某个页面对应的js或者wxss文件,只需要保持路径和文件名相同即可。
四、模版语言及事件系统
1):模版语法类似vue,接近原生的自定义标签。数据绑定和渲染类似vue的语法,不过是以wx:开头(vue 以v: 作为标识)
/**
* 类似vue的条件渲染语法,熟悉vue的话应该不会陌生
**/
<view wx:if="{{condition}}">
</view>
2):事件系统
事件系统类似react:定义了一套自己的事件系统。包含一系列常用事件类型:
绑定方式:事件绑定的写法同组件的属性,以 key+value 的形式:
以bind或catch开头,然后跟上事件的类型,如bindtap catchtouchstart,
value 是一个字符串,需要在对应的 Page 中定义同名的函数。不然当触发事件的时候会报错。
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡 。例如:
/** *bind/catch +事件类型,两种事件绑定方式 */ <view id="outter" bindtap="handleTap1"> outer view <view id="middle" catchtap="handleTap2"> middle view <view id="inner" bindtap="handleTap3"> inner view </view> </view> </view>
3):事件对象:包括BaseEvent 基础事件对象,CustomEvent 自定义事件对象,TouchEvent 触摸事件对象等。
五、优缺点:
1):优点
1、提供相应的类似jsbridge的支持,使得某些功能更为方便
2、本质是mvvm的前端框架,简化操作。
3、提供了比较成型的组件库,构建比较方便
4、基于微信appapp,使得开发成本下降
5、支持模块化
2):缺点
1、由于框架并非运行在浏览器中,js相关bom的方法无法使用。如 document,window等。不过可以获取当前事件对应的dom对象。相比react还是一样不建议操作dom,jq,zepto等工具库也不好使了
2、又是一套自己的语法,需要学习时间,不过学习曲线不陡峭
3、目前不支持直接引入 node_modules ,开发者需要使用到node_modules时候建议拷贝出相关的代码到小程序的目录中这样局限性就比较大了,需要自己手动的东西好多
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 微信小程序开发
# 微信小程序API
# 微信小程序模板
# 微信小程序 form组件详解及简单实例
# 微信小程序 checkbox组件详解及简单实例
# 微信小程序 Button 组件详解及简单实例
# 微信小程序 用户数据解密详细介绍
# 微信小程序 限制1M的瘦身技巧与方法详解
# 微信小程序 数组(增
# 删
# 改
# 查)等操作实例详解
# 微信小程序 Canvas增强组件实例详解及源码分享
# 详解微信小程序——自定义圆形进度条
# 详解微信小程序开发—你期待的分享功能来了
# 微信小程序序新增5大功能
# JS中微信小程序自定义底部弹出框
# 微信小程序 textarea 详解及简单使用方法
# 微信小程序 label 组件详解及简单实例
# 自己的
# 绑定
# 自定义
# 是一个
# 并在
# 样式表
# 这一
# 是在
# 运行环境
# 放在
# 又是
# 多个
# 将会
# 也没
# 耍流氓
# 无外乎
# 两种
# 能在
# 不过是
# 用了
相关文章:
如何用y主机助手快速搭建网站?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
创业网站制作流程,创业网站可靠吗?
如何基于PHP生成高效IDC网络公司建站源码?
制作网站的基本流程,设计网站的软件是什么?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
中山网站推广排名,中山信息港登录入口?
如何快速搭建二级域名独立网站?
建站之星如何开启自定义404页面避免用户流失?
如何实现建站之星域名转发设置?
如何高效配置IIS服务器搭建网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
音乐网站服务器如何优化API响应速度?
制作门户网站的参考文献在哪,小说网站怎么建立?
如何选择PHP开源工具快速搭建网站?
Thinkphp 中 distinct 的用法解析
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何用AWS免费套餐快速搭建高效网站?
香港服务器如何优化才能显著提升网站加载速度?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
如何通过.red域名打造高辨识度品牌网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站主机选虚拟主机还是云服务器更好?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何快速搭建安全的FTP站点?
制作网站怎么制作,*游戏网站怎么搭建?
建站之星安装失败:服务器环境不兼容?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
微信小程序 input输入框控件详解及实例(多种示例)
如何快速查询网址的建站时间与历史轨迹?
建站之星微信建站一键生成小程序+多端营销系统
网站制作报价单模板图片,小松挖机官方网站报价?
如何在万网自助建站平台快速创建网站?
如何通过宝塔面板实现本地网站访问?
如何选择高效稳定的ISP建站解决方案?
建站主机CVM配置优化、SEO策略与性能提升指南
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
javascript中的try catch异常捕获机制用法分析
建站之家VIP精选网站模板与SEO优化教程整合指南
宿州网站制作公司兴策,安徽省低保查询网站?
如何做静态网页,sublimetext3.0制作静态网页?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
建站主机SSH密钥生成步骤及常见问题解答?
如何选择高效可靠的多用户建站源码资源?
建站之星如何配置系统实现高效建站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
PHP 500报错的快速解决方法
湖北网站制作公司有哪些,湖北清能集团官网?
建站168自助建站系统:快速模板定制与SEO优化指南
如何用PHP快速搭建CMS系统?
*请认真填写需求信息,我们会在24小时内与您取得联系。