微信小程序技术总结小程序单向数据流单向数据流就是从逻辑层到视图层,vue也是单向数据流Modelview,但是实

客户不知道小程序如何注册的情况下,需要大概告知操作界面在哪。

进入公众号找的小程序管理,选择快速注册小程序即可进行注册。

根据提示进行账号注册。

添加完成之后即可开发小程序了。

pages用来存放所有小程序页面。

utils用来存放工具性质的模块。

api统一管理api接口。

其余的文件根据项目需要进行划分,如components文件就是存放公共组件模块。

app.json是小程序的全局配置,包括了小程序的所有页面路径,窗口外观,底部tab等。当中的style字段这是样式版本,加上style和删除style,这样会使用小程序组件样式是不一样。

project.config.json是项目配置文件,记录小程序开发工具所做的个性化配置,如项目名称,小程序账号ID等

页面中的json小程序每个页面中的json,配置本页面的窗口外观,会覆盖app.json的window中相同配置项。

1.加载解析页面的json文件配置。

2.加载页面wxml和wxss样式。

3.执行页面js文件,调用Page()创建页面实例。

4.页面渲染完成。

单向数据流就是从逻辑层到视图层,vue也是单向数据流Model-view,但是实现了双向数据绑定。而小程序没有做劫持代理,所以不能进行双向数据绑定。但现在小程序是有双向数据绑定这个概念的,叫简易的双向数据绑定。

需求:logo需要同右边的胶囊按钮顶部对齐。

解决方法:使用wx.getMenuButtonBoundingClientRect()

输出下wx.getMenuButtonBoundingClientRect(),可以看见胶囊按钮的信息,需要注意的是单位为px。

wx.getMenuButtonBoundingClientRect().top就能获取到胶囊按钮距离信息栏的距离,然后将px转为rpx。

解决办法:wx.createSelectorQuery()

注意两点:

1.要在ready函数中执行

2.在组件中使用wx.createSelectorQuery()之后,要用in()来指定范围。(将选择器的选取范围更改为自定义组件component内)或者在自定义组件或包含自定义组件的页面中,应使用this.createSelectorQuery()来代替

直接在this.setData中直接修改,编译器会显示波浪线报错。

data:{list:{deleted:false,name:"设计模块"}}//对象.属性名:修改的值this.setData({'list.deleted':true})修改数组data:{list:[{id:1,deleted:false},{id:2,deleted:false},{id:3,deleted:false}]}this.setData({'list[0].deleted':true})或者加入变量使用,用字符串拼接起来。

data:[{"id":0,"name":'zs'},{"id":1,"name":'ddds'}]letnewData="data["+0+"].name"this.setData({[newData]:"张三"})console.log(this.data.data)注:修改对象和数组都要用''包括起来

但下标总不能写死了,所以循环下就行了,主要就是赋值给新的变量,在新变量中进行修改数据,再进行this.setData。

第一步:进入eCharts官网点击下载选择下载,进入在线制定。按需要下载,减少体积

第二步:点击在线制定

第三步:选择需要的图形

第四步:下载

用ec-canvas文件就行

第七步:将ec-canvas文件放入项目中

我这里是在组件中创建了echarts文件夹,就把ec-canvas文件中的文件全部放进去。注意如果是按需制定的echarts,将echarts.js替换成在线制定生成的echarts.min.js。

同时修改ec-canvas.js中的import*asechartsfrom'./echarts'的引用文件。

第八步使用

配置组件使用

"usingComponents":{"ec-canvas":"../echarts/ec-canvas"}视图层

//引入eChartsimport*aseChartsfrom'../../components/echarts/echarts'data:{ec:{onInit:initChart},}functioninitChart(canvas,width,height){//绘制宽高letchart=echarts.init(canvas,null,{width:width,height:height});canvas.setChart(chart);//容器初始化echarts.registerMap('china',geoJson);//地图数据注册letoption={}chart.setOption(option);//返回初始化结果returnchart;}另外一种封装成组件

逻辑层

/***组件的初始数据*/data:{ec:{onInit:null},},//在组件实例进入页面节点树时执行attached:function(){this.setData({ec:{onInit:this.initChart}})},/***组件的方法列表*/methods:{//eCharts可视化地图initChart:function(e,width,height){//绘制宽高地图模糊时候使用devicePixelRatio调整清晰度constchart=eCharts.init(e,null,{width:width,height:height,devicePixelRatio:2.5});//容器初始化e.setChart(chart);//地图数据注册eCharts.registerMap('china',geoJson);//初始化数据letoption={}chart.setOption(option);//返回初始化结果returnchart;},大致效果:

wx.navigateTo打开页面最多只能打开10个,超过10个之后就没反应。

//导航列表跳转对应页面handleNavigate:function(e){//获取全局变量constapp=getApp()//获取全局变量中adCenterPitchOn的值letadCenterPitchOn=app.globalData.adCenterPitchOn//判断如果当前选中的id与全局变量中adCenterPitchOn不相等进行跳转,相等就不进入跳转程序,减少重复跳转。if(e.currentTarget.dataset.id!=adCenterPitchOn){this.setData({pitchOn:e.currentTarget.dataset.id})//navigateTo跳转不能打开10个页面,需要进行判断超过10个页面就关闭所有页面,重新进行页面栈个数统计letpages=getCurrentPages()//获取当前打开的页面letpagesLength=pages.length//获取当前打开页面的数量//打开页面数量大于等于10使用reLaunch关闭所有页面,重新进行页面栈个数统计。if(pagesLength>=10){wx.reLaunch({url:e.currentTarget.dataset.path,})}else{//小于10就使用navigateTowx.navigateTo({url:e.currentTarget.dataset.path,})}}}这里不直接使用reLaunch是因为会重新渲染,跳转一次屏幕就会有闪动。所以进行粗糙的处理到了10个页面,使用reLaunch,十次之后才会闪动一次。

第一步:开启tabBar自定义

在app.json中找的tabBar加入custom:true

同时官方文档建议还是将list内容写上,用来兼容低版本。

第二步:创建目录

创建custom-tab-bar与pages同级。

第三步:custom-tab-bar中wxml编写

创建一个工具类,用来处理custom-tab-bar切换

点击时触发,进行跳转

getTabBarIndex:function(e){//获取当前点击的下标及位置consttabBarData=e.currentTarget.datasetconstpresentPath=tabBarData.pagepath//跳转到对应页面,并关闭其他所有非tabBar页面wx.switchTab({url:presentPath,})}第五步:调用及高亮不变处理

在tab页引入consttabService=require("../../utils/tab-service");

ios和android显示的效果会有差异,这就需要通过识别机型进行适配。

在app.js中使用wx.getSystemInfoSync().platform获取手机型号

onLaunch(){//获取机型constres=wx.getSystemInfoSync().platform//将机型放进缓存if(res=='ios'){wx.setStorageSync('facility',"ios")}else{wx.setStorageSync('facility',"android")}},真机测试才行,模拟测试值是devtools

//导入服务器配置信息importconfigfrom'../config/config'exportdefault(url,data,method='GET')=>{//初始化Promise实例returnnewPromise((resolve,reject)=>{wx.request({url:config.host+url,data,method,success:(res)=>{//成功之后修改Promise状态resolve(res)},fail:(err)=>{//失败之后修改Promise状态reject(err)}})})}使用方法:

importreqfrom'../../utils/request'//引入封装的地址onLoad:asyncfunction(){//获取数据letpageImgData=awaitreq('/cas/query')},关于传值的方法全局变量使用在app.js中使用globalData定义全局变量。

//定义全局变量globalData:{userInfo:null,tabBarIndex:0,}app.globalData.变量名获取定义的变量值

//获取全局变量constapp=getApp()console.log(app.globalData.tabBarIndex)//直接修改变量,不需要setDataapp.globalData.tabBarInde=1父组件传值给子组件父组件使用子组件,传入父组件定义的值:tableHeaderData和tableList

/***组件的属性列表*/properties:{//列表表头数据tableHeader:{type:Array,value:[],},//列表数据tableList:{type:Array,value:[]},},父组件没有传值,子组件也不会报错。所以父组件可以按需传入相应得值。

//将值传给父组件this.triggerEvent("getLogHeight",62)父组件接收子组件传入的值

//设置缓存,传入数据wx.setStorageSync('facility',2)//获取缓存下的值wx.getStorageSync('facility')页面跳转传值wx.navigateTo({url:'xxxdata='+this.data.job,})接收参数:

解决方案:引入wxs模块实现

根据开发场景使用,这里就单独创建一个wxs,放入工具文件夹中。

wxs中写入方法

functionftoFixed(num){returnnum.toFixed(2);}module.exports.ftoFixed=ftoFixed;wxml中使用wxs

保留小数点稍微完善版:

接收后端传入的数据,将字符串显示成html格式内容。

可是使用rich-text

解决办法:使用wxPars

将下载好的文件放入小程序中,放的位置看你心情。

在需要的功能模块下引入js文件。

js中进行数据绑定

/*1.bindName绑定的数据名(必填)*2.type可以为html或者md(必填)*3.data为传入的具体数据(必填)*4.target为Page对象,一般为this(必填)*5.imagePadding为当图片自适应是左右的单一padding(默认为0,可选)*/WxParse.wxParse(bindName,type,data,target,imagePadding)letthat=thiswx.request({url:'',header:{'Content-Type':'application/json',},success:res=>{letarticle=res.data.objWxParse.wxParse('article','html',article,that,0);}})引入WxParse.css,可以在app.wxss引入,建议在需要模块的wxss样式文件中单独引用,不要全局使用,减少样式冲突。

在wxml文件中引入模板

使用模板,.nodes不要去掉。

如果head标签里有样式,这里会直接显示样式代码。

按照以往风格,简单粗暴的解决:在wxss文本中加入下面代码

.card_service_ul>.WxEmojiView.wxParse-inline{display:none;}.wxParse-head{display:none;}模拟器数据正常显示,真机测试获取不到数据这个问题有可能是后端同学限制了接口访问IP,造成真机测试时接口调用失败。

获取md5js源文件,源文件百度可以找到,因为审核不通过这里就不放了。

将md5源文件放入工具文件夹中

constmd5=require('../../utils/md5')可以直接使用md5加密,也可以拼接之后再加密,这里看后端是怎么要求的。

后端会给一些字段,直接存入数组中

data:{//里面存放后端需要的字段mdValue:[x,x,x,x,x,x,x,x,x,x,x,x,x]},进行拼接,将密码和数组中的字段拼接一起。注意这里的拼接方式后端规定,前端按照格式进行拼接即可。

letuserPwdStr=this.data.mdValue[4]+this.data.mdValue[5]+this.data.userPwd+this.data.mdValue[3]+this.data.mdValue[6]最后使用md5加密

md5(userPwdStr)base-64加密js放入工具文件夹中,源文件百度可以找到,因为审核不通过这里就不放了。

引入js

constbase64=require('../../utils/base64')直接使用

base64.base64_encode('xxxxx')如果后端有加密要求根据后端的规则进行加密。

底部图标大小不要超过30kb,如果超过小程序就会报错,15kb其实差不多就可以了。

当复用小程序整体代码,只是替换图片时,另起一个项目注意替换原来的appid。

在需要的页面中的json文件中简单配置下即可,app.json设置无效。

sharePhone字段自己定义就行。

代码中也需要进行配置:

在需要播放的页面中找到json文件,配置下视频插件。

"usingComponents":{"txv-video":"plugin://tencentVideo/video"}在wxml文件中加入代码:

关于视频需要申请一个企业账号,进行主体认证等操作。然后上传视频到腾讯视频,审核通过就行。

获取视频链接,右键视频点击视频信息

嵌入代码打开里面的vid就是o33401kc9b1跟上面的一样。

小程序有自带的人工客服,组件button加上open-type=“contact”属性,客服人员在小程序后台添加就行。

wx:for="{{book}}"默认是item

进行修改方法:wx:for-item="dataLiet"就可以使用dataLiet。

下标index也是wx:for自带的,可以进行修改wx:for-index="idx"就可使用idx

注意使用wx:for记得加上wx:key="index"可以换成后端传入的id。

1.使用外部链接进行引用(动态加载网络字体)

代码放在app.js中或者需要使用到的模块js中

font-family:"PingFang"!important;需要注意一点就是ios系统可以正常获取到字体,但是在安卓手机中会失败。这就需要进行配置,进入服务器找nginx配置,站点配置文件加入以下代码,开启cros支持,然后重启下nginx。

这里造成安卓手机失败的原因是字体链接访问需满足浏览器同源策略,字体文件资源设置CORS的Access-Control-Allow-Origin为小程序域名:servicewechat.com或者*

该行代码的含义为在HTTP响应中添加一个名为"Access-Control-Allow-Origin"的头部字段,这个头部字段的作用是指定允许访问资源的源,即哪些域名可以与服务器进行跨域请求;

如果是使用的宝塔的配置如下

location~.(eot|otf|ttf|woff|woff2|svg)${add_headerAccess-Control-Allow-Origin*;add_headerContent-Typefont/ttf|font/woff|font/woff2;}根据配置文件来设置。

解决安卓特殊字体失败问题还有一种方法就是字体文件转base64。

1.点击按钮Addfonts(添加字体)

2.将Base64encode按钮打开,下面的Formats按钮按需要选择。

3.转换好后点击Download下载

下载成功之后的压缩包。

解压后:

我大概看了一下大小比原来字体的还要大一些,所以个人觉得没必要安卓和IOS两套写法,直接在服务器配置文件就好了。

解决方法:删除掉app.json里面的

"lazyCodeLoading":"requiredComponents",

或者降低基础库的版本。

代码层级没有问题,却无法获取到手机信息

合法已经域名配置了,但小程序报错ERR_SSL_PROTOCOL_ERROR,直接找后端解决,代理啥的配置绝对有问题。

THE END
1.转帖:第三版智能手机85个常见问题及解决方法,n86不知道可以不可以发现音质有飞一般的变化,高音很清了,立体场效果很棒,低音效果没有怎么大的改观。如果觉得声音太大可以把新预设里面再做调整。 问题14、怎样利用记事本编辑卡中的TXT? 答:进入卡里的TXT文件,直接打开,选"储存",显示"附件已存",再打开手机的记事本软件,这个TXT文件显示在软件里了,也就可以进入编辑状态了。http://www.360doc.com/content/13/0315/01/1148546_271582223.shtml
2.云风的BLOG:游戏开发Archives我对游戏设计的理解还不够,所以还需要继续以设计游戏的角度去挖掘游戏深层次的东西。以游戏爱好者的角度去玩那些好评如潮的游戏体会游戏带来的乐趣是不够的,还需要多玩一些毁誉参半但制作者有自己想法的作品。当然,还需要回避一些仅仅是把已有游戏换一个虚构层做出来的仿冒品。https://blog.codingnow.com/oiie/oiie/
3.努比亚手机怎么换字体?nubia手机字体更换图文详细教程努比亚手机用久了许多用户朋友都嫌自带字体不好看,但又不知道努比亚手机怎么换字体,其实把手机初始字体设置成其他字体十分容易只需要短短3分钟,好奇的用户马上点击查看nubia手机换字体教程来更换您喜欢的字体吧。 更换字体,可以有效缓解局域性的审美疲劳 说到安卓设备,大家都了解开放性,大部分人喜欢获取ROOT,刷机,刷框架https://www.jb51.net/shouji/598033.html
4.www.vita361.com/mokslip91312.html回到当年TES签约JKL的时候,郭皓曾经在采访中表示JKL就是他们梦寐以求的选手,也是TES的绝对核心,郭皓也确实是说到做到,在S10结束之后,这么多年TES成绩始终不好,JKL也饱受诟病,经常在关键比赛中出现失误送掉。 但即使是这样,郭皓依然选择相信,在经历了那么多次失败的情况下,郭皓还是不改初心不愿放弃,继续以JKL为核心https://www.vita361.com/mokslip91312.html
5.视频剪辑基础教程,高级教程新手指南你只需一键保存,即可在手机、平板或电脑上随时下载和使用。如何保存至夸克网盘?点击下方链接,即可直接跳转到夸克网盘页面。选择你想要保存的素材文件夹。点击“保存到我的网盘”,即可完成保存。 素材目录一览以下是我们精选的剪辑素材目录,覆盖了从字体、图片到音效和视频素材的各个方面: 字体素材 - 精选字体库,为你https://www.foxitsoftware.cn/foxit-clip/help/clips/
6.PPC手机注册表使用秘籍爱范儿我的机器是多830,系统字体相关的主要有这么几个字号。 Tahoma:-12 整个系统中相对大字体相关 Tahoma:-11 输入法面板候选字字体大小 Tahoma:-15 和系统中另外相对小字体相关) 24. 把时间换成电量图标的方法 HKEY-LOCAL-MACHINE\Software\ Microsoft\Shell分支,将其下面的“Showtitlebarclock”的键值改为“0”,然后https://www.ifanr.com/375
7.魅蓝note2不用root的换字体不过,魅族官方于2015年9月25日晚发布了flyme5系统固件,该版本系统固件支持多种字体设置。尽管目前仅限于MX5型号适配,但有消息称第二批适配flyme5的魅族手机型号包括魅蓝note2。不过,官方没有明确这批适配的时间计划,部分网友推测适配顺序可能是PRO5-note2-MX4pro-MX4。因此,魅蓝note2用户在几个月https://zhidao.baidu.com/question/501346754468810772.html
8.华为手机更换字体教程安卓机|华为手机更换字体教程 第一种,直接更换字体名字: ①先在主题商店随便下载一款免费字体,必须是免费的; ②下载的字体位置是Huawei → Themes → HWFonts,找到刚刚下载的字体,复制它的名字; ③把你要用的字体改成这款字体的名字,然后替换掉它;https://www.douban.com/group/topic/231790522
9.个人简历格式(集合15篇)例如医生就是使用履历型格式的典型职业。在履历型格式中无需其他,只要罗列出你的资信情况,如就读的医学院、住院实习情况、实习期、专业组织成员资格、就职的医院、公开演讲场合以及发表的著作。换句话说,资信说明一切。 图谱型格式 图谱型格式是一种与传统格式截然不同的简历格式。传统的简历写作只需要运用你的左脑,https://www.ruiwen.com/gerenjianli/5656342.html
10.android系统英文字体安卓默认英文字体小蝌蚪的技术博客默认中文字体是Droidsansfallback 默认英文和数字字体是Droid Sans 无微软雅黑字体 winphone 系统 默认中文字体是Dengxian(方正等线体) 默认英文和数字字体是Segoe 无微软雅黑字体 各个手机系统有自己的默认字体,且都不支持微软雅黑 如无特殊需求,手机端无需定义中文字体,使用系统默认 https://blog.51cto.com/u_12226/6849956
11.关于手机不能换字体等问题解答Q1、为什么我的手机不能换字体? A:手机无法换字体可能有以下几个原因: 1、您的机型太新,我们尚未适配。众所周知,安卓手机品牌众多,更新换代速度极快,我们毕竟人力有限,适配速度难以匹及,但我们一定尽自己最大努力完成适配。 2、您的手机品牌厂商设置的壁垒,我们尚未成功攻破,为了推广自带字体商店,手机厂商普遍对第https://www.weibo.com/p/1001603966035245049113
12.不用Root,国产安卓手机如何把字体切换成安卓原生字体我不太喜欢微软雅黑,尤其是显示繁体字的时候用的是新字形。雅黑作为标题或者扁平化UI使用是很好的字体,但是正文真的不怎么样。而且我也不喜欢Root手机,因为我觉得小米系统已经很人性化了。 原生6.0安卓用的是思源黑体(简体)和微软正黑体(繁体),会视情况自动切换,但是国产手机换回原生字体的功能被锁死。 我用的是https://www.jianshu.com/p/0564a4965f23
13.iphone改字体当十几年的iPhone用户换用了小米?上传后自动换了方向,公众号也没找到编辑 反正看全面屏效果我就不改了,请转动设备或您的脖子 用红米拍iPhone 左下角的水印可以编辑,拍后也可轻易关掉 虽然我平时基本上是用更柔和的KindlePaperwhite 阅读,但是完整的屏幕魅力毋庸置疑。 喜欢操控性手机游戏的体验估计会更明显。4. 其它 https://blog.csdn.net/weixin_39737001/article/details/109757242
14.PPC修改注册表大全(注册表必看)(转载)johnduconnection name是指手机上具体设定的连接名称,如中国移动CMWAP,根据实际情况不同而不同;而且会把所有连接都显示出来,可以删除不用的连接,等同于在设置面板上设定或删除。 11、注册表内容大致上可以分为四组 HKEY_CLASSES_ROOT: 用来放置一些资料的定义,如副档名的关联,资料的类别之类的东西。 https://www.cnblogs.com/duzongfang/archive/2011/02/16/1956164.html
15.Android发展历程回顾知更鸟但蜂巢仍然是一个重要的里程碑,这是第一个具有丰富经验的设计师所负责的版本,整个Android界面进行了重建,Android的默认程序看起来终于像 一个整体的设计了,它也为未来手机版本的变革打下了基础,不过蜂巢所使用的硬科幻色彩在未来的几个版本中逐渐的淡化掉了。 https://zmingcx.com/android-development-process.html
16.前端开发中79条不可忽视的知识点汇总如: 使用documentFragment 对象在内存里操作DOM 先把DOM给display:none(有一次reflow),然后你想怎么改就怎么改。比如修改100次,然后再把他显示出来。 clone一个DOM结点到内存里,然后想怎么改就怎么改,改完后,和在线的那个的交换一下。 3)不要把DOM结点的属性值放在一个循环里当成循环里的变量。不然这会导致https://developer.aliyun.com/article/904803
17.OPPO开放平台解决方案:在本地主题文件夹picture-res-3168x1440分辨率里面,把预览图拷贝到方便上传的地方,在主题编辑器导出页面-选择分辨率1440x3168,重新上传这几张预览图。 选择:覆盖,就会自动生成其他分辨率 键盘位置弹窗提示字体未反色看不清楚 解决方案:COUIToolTips 需要配置这个颜色资源: coui_color_white https://open.oppomobile.com/new/developmentDoc/info?id=11929
18.2万年轻人,想破解2.6亿老年人的「生活困境」去年,适老化这个话题热门了起来,尤其是数字鸿沟的问题得到了社会各界的关注,很多适老化APP应运而生。我也把父母的手机设置改了一下,换成简洁的关怀模式,以及放大了系统字体。 枇杷帮助父母设置的极简模式,图源受访者 可他们接触到手机的时间太晚了,很难建构起像我们一样的逻辑,比如我们看到人的半身像就知道是“https://36kr.com/p/1719567436954882
19.字体替换app下载软件大全字体替换app下载推荐下载字体替换app下载 字体替换app下载 用与众不同的字体,每天看喜欢的样子!字体替换app下载推荐什么软件?丢掉你系统自带的字体吧,选择这些APP,然后换一个你喜欢的字体这样每天拿起手机都会非常愉快!或者让你在日常和朋友对话中使用一个与众不同的字体,让他们眼前一亮!用独特的字体展示你的与众不同吧! No.1 酷字体 https://wap.pp.cn/topic/485346/