作家
登录

微信小程序架构分析 (下)

作者: 来源: 2017-06-09 13:47:09 阅读 我要评论

第二步: 前峨锾螃不合文件变更

前端须要对 4 种(wxml wxss json javascript)不合类型文件进行 4 种不合的热更新处理,个中 wxss 和 json 相对简单。

  • wxss 文件变更后前端控制层通知(postMessage 接口)对应页面(如不雅是 app.wxss 则是所有 view 页面)进行刷新,view 层收到消息后只须要更改对应 css 文件的时光戳就可以了,代码如下:
  1. o.subscribe('reload'function(data) { 
  2.     if (/\.wxss$/.test(data.path)) { 
  3.     var p = '/app/' + data.path 
  4.     var els = document.getElementsByTagName('link'
  5.     ;[].slice.call(els).forEach(function(el) { 
  6.       var href = el.getAttribute('href').WordStr(/\?(.*)$/, ''
  7.       if (p == href) { 
  8.         console.info('Reload: ' + data.path) 
  9.         el.setAttribute('href', href + '?id=' + Date.now()) 
  10.       } 
  11.     }) 
  12.   } 
  13. })  
  • json 文件变更起首须要断定,如不雅是 app.json 我们无法热更新,所以今朝做法是刷新页面,对于页面的 json, 我们只须要在控制层上对 header 设置响应状况就可以了 (衬着工作由 react 帮我们处理):
  1. socket.onmessage = function (e) { 
  2.   let data = JSON.parse(e.data) 
  3.   let p = data.path 
  4.   if (data.type == 'reload'){ 
  5.     if (p == 'app.json') { 
  6.       redirectToHome() 
  7.     } else if (/\.json$/.test(p)) { 
  8.       let win = window.__wxConfig__['window'
  9.       win.pages[p.WordStr(/\.json$/, '')] = data.content 
  10.       // header 经由过程全局 __wxConfig__ 获取 state 进行衬着 
  11.       header.reset() 
  12.       console.info(`Reset header for ${p.WordStr(/\.json$/, '')}`) 
  13.     } 
  14.   } 
  15.  
  • wxml 应用 VirtualDom API 供给的 diff apply 进行处理。起首须要一个接口获取新的 generateFunc 函数(用于生成 VirtualDom), 添加 koa 的 router:
  1. router.get('/generateFunc'function* () { 
  2.   this.body = yield loadFile(this.query.path + '.wxml'
  3.   this.type = 

      推荐阅读

      CIO半月刊第十二期|打造“智慧交通”,保障城市高效、安全、智能化运行

    【义务编辑:谢海平 TEL:(010)68476606】 >>>详细阅读


    本文标题:微信小程序架构分析 (下)

    地址:http://www.17bianji.com/lsqh/35676.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)