欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > 微信开发 > 微信小程序探究:运行环境,目录结构,模版语言及事件系统 ...

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:738

高端HTML5响应式企业通用网

2020-05-06   浏览:519

html5响应式外贸网站英文版

2020-05-08   浏览:508

HTML5自适应律师工作室类网

2020-04-04   浏览:502

HTML5影视传媒文化公司类网

2020-05-12   浏览:497

微信小程序探究:运行环境,目录结构,模版语言及事件系统 ...

发布时间:2020-12-08  

  前段时间比较流行的微信小程序,因为一直没有所谓内测码也没具体关注。拖到现在正好借组内分享的时机来仔细了解一下微信小程序。了解一个新的事物无外乎从是什么(本质),怎么用(具体用法),为什么用(优缺点)来学习,首先分析一下微信小程序是什么,听起来比较高大上,说实话原来我确实挺疑惑,到底这一套是什么开发机制,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)和注释说明如下:

  

 

1 //app.js 2 // 微信小程序就是调用微信开放jsbridge,来完成微信h5开发中某些原本比较难的功能的特定的微信前端框架 3 /** 4 * app 即小程序的生命周期管理。 5 * */ 6 App({ 7 // 初始化 8 onLaunch: function () { 9 //调用API从本地缓存中获取数据 10 var logs = wx.getStorageSync('logs') || [] 11 logs.unshift(Date.now()) 12 wx.setStorageSync('logs', logs) 13 }, 14 // 全局方法或者变量,可在不同page中使用 15 getUserInfo:function(cb){ 16 var that = this 17 if(this.globalData.userInfo){ 18 typeof cb == "function" && cb(this.globalData.userInfo) 19 }else{ 20 //调用登录接口 21 wx.login({ 22 success: function () { 23 wx.getUserInfo({ 24 success: function (res) { 25 that.globalData.userInfo = res.userInfo 26 typeof cb == "function" && cb(that.globalData.userInfo) 27 } 28 }) 29 } 30 }) 31 } 32 }, 33 globalData:{ 34 userInfo:null 35 } 36 })

 

  app.json(文件中不允许有注释)示例如下:

  

微信小程序探究:运行环境,目录结构,模版语言及事件系统 ...

 

1 { 2 "pages":[ 3 "pages/index/index", 4 "pages/logs/logs", 5 "pages/swiper/swiper", 6 "pages/input/input", 7 "pages/form/form" 8 ], 9 "window":{ 10 "navigationBarBackgroundColor": "#ffffff", 11 "navigationBarTextStyle": "black", 12 "navigationBarTitleText": "微信小程序", 13 "backgroundColor": "#eeeeee", 14 "backgroundTextStyle": "light" 15 }, 16 "tabBar":{ 17 "borderStyle": "white", 18 "list": [{ 19 "pagePath": "pages/index/index", 20 "iconPath":"image/icon_API.png", 21 "selectedIconPath":"image/icon_API_HL.png", 22 "text": "首页" 23 },{ 24 "pagePath": "pages/form/form", 25 "iconPath":"image/plus.png", 26 "selectedIconPath":"image/green_tri.png", 27 "text": "更多" 28 }, { 29 "pagePath": "pages/swiper/swiper", 30 "iconPath":"image/icon_COM.png", 31 "selectedIconPath":"image/icon_COM_HL.png", 32 "text": "其他" 33 } 34 ] 35 } 36 }