微信小程序学习

小程序开发

一、申请帐号

1.点击 https://mp.weixin.qq.com/wxopen/waregister?action=step1 根据指引填写信息和提交相应的资料,就可以拥有自己的小程序帐号。

image.png

2.注册完成以后,登录 https://mp.weixin.qq.com ,我们可以在菜单 “设置”-“开发设置” 看到小程序的 AppID 了 。

image.png
image.png

这里就是我创建小程序后,生成的APPID。

二、安装开发工具

前往 开发者工具下载页面 ,根据自己的操作系统下载对应的安装包进行安装,有关开发者工具更详细的介绍可以查看 《开发者工具介绍》

image.png

软件打开选择小程序项目,

image.png

右边是我们打开小程序的历史记录。这里我们点击+号新建一个小程序项目。

image.png
image.png

这里我创建了一个myFirstDemo的项目。

image.png

下面我们来介绍一下 开发工具的具体情况:

  1. 点击1我们可以切换账号,并且如果有系统更新的消息,我们会在这里收到推送提醒;
  2. 234 我们可以点击隐藏我们对应的模块,分别对应左中下;
  3. 5我们可以选择在不同的模式下运行我们的demo
  4. 我们可以添加自定义的编译模式,试用场景:

在开发中,遇到一个层级较深的页面,每次都要点击好多步才能调试,也比较闹心,有了自定义编译模式,就方便很多了

image.png

点击红圈处, 选择 "+添加编译模式" , 默认的, 启动页面会填入当前预览界面的地址, 启动参数 填写当前页面需要的url参数即可直接跳转调试界面

image.png
  1. 编译:当我们在修改代码后,通过编译可以实时的在我们的模拟器中查看我们的效果;

  2. 预览:可以实时的用真机进行调试;

  3. 切后台:切换到不同的场景,来个性化我们的功能;

  4. 清缓存:清除工具中的文件、数据、登录缓存等;

  5. 版本管理:通过git、svn进行版本管理;

  6. 社区:微信官方的开发社区;

  7. 测试号:开发者可以申请小程序或小游戏的测试号,并使用此帐号在开发者工具创建项目进行开发测试,以及真机预览体验。

  8. image.png
  1. console:打印小程序页面的一些调试log信息;

  2. sources:列出小程序页面的所有脚本信息,并对其进行断点调试;

  3. network:网络请求的状态信息,请求资源的响应数据;

  4. security:

  5. storage:动态修改缓存数据;

  6. APPdata:实时数据查看不同设备的兼容性问题;

  7. Wxml:组件元素的样式修改;

  8. Sensor:我们的地理位置信息;

三、JSON配置

1. app.json 是当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。

{

 "pages":[

  "pages/index/index",

  "pages/logs/logs"

 ],

 "window":{

 "backgroundTextStyle":"light",

 "navigationBarBackgroundColor": "#fff",

 "navigationBarTitleText": "WeChat",

 "navigationBarTextStyle":"black"

 }

}
  • pages字段 —— 用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。

  • window字段 —— 定义小程序所有页面的顶部背景颜色,文字颜色定义等。

工具配置 project.config.json

通常大家在使用一个工具的时候,都会针对各自喜好做一些个性化配置,例如界面颜色、编译配置等等,当你换了另外一台电脑重新安装工具的时候,你还要重新配置。

考虑到这点,小程序开发者工具在每个项目的根目录都会生成一个 project.config.json,你在工具上做的任何配置都会写入到这个文件,当你重新安装工具或者换电脑工作时,你只要载入同一个项目的代码包,开发者工具就自动会帮你恢复到当时你开发项目时的个性化配置,其中会包括编辑器的颜色、代码上传时自动压缩等等一系列选项。

WXML 模板

从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中HTML是用来描述当前这个页面的结构,CSS用来描述页面的样子,JS通常是用来处理这个页面和用户的交互,具体wxml可查看:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/index.html

WXSS 样式

WXSS 具有 CSS 大部分的特性,小程序在 WXSS 也做了一些扩充和修改。

  1. 新增了尺寸单位。在写 CSS 样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,采用一些技巧来换算一些像素单位。WXSS 在底层支持新的尺寸单位 rpx ,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可,由于换算采用的浮点数运算,所以运算结果会和预期结果有一点点偏差。
  2. 提供了全局的样式和局部样式。和前边 app.json, page.json 的概念相同,你可以写一个 app.wxss 作为全局样式,会作用于当前小程序的所有页面,局部页面样式 page.wxss 仅对当前页面生效。
  3. 此外 WXSS 仅支持部分 CSS 选择器

更详细的文档可以参考 WXSS

JS 交互逻辑

一个服务仅仅只有界面展示是不够的,还需要和用户做交互:响应用户的点击、获取用户的位置等等。在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作。

四、小程序的启动

微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地。

紧接着通过 app.json 的 pages 字段就可以知道你当前小程序的所有页面路径:


{

  "pages":[

  "pages/index/index",

  "pages/logs/logs"

 ]

}

这个配置说明在 QuickStart 项目定义了两个页面,分别位于 pages/index/index 和 pages/logs/logs。而写在 pages 字段的第一个页面就是这个小程序的首页(打开小程序看到的第一个页面)。

于是微信客户端就把首页的代码装载进来,通过小程序底层的一些机制,就可以渲染出这个首页。

小程序启动之后,在 app.js 定义的 App 实例的 onLaunch 回调会被执行:

App({

 onLaunch: function () {

  // 小程序启动之后  触发

 }

})

整个小程序只有一个 App 实例,是全部页面共享的,更多的事件回调参考文档 注册程序 App

程序与页面

你可以观察到 pages/logs/logs 下其实是包括了4种文件的,微信客户端会先根据 logs.json配置生成一个界面,顶部的颜色和文字你都可以在这个 json 文件里边定义好。紧接着客户端就会装载这个页面的 WXML 结构和 WXSS 样式。最后客户端会装载 logs.js,你可以看到 logs.js 的大体内容就是:

Page({

 data: { // 参与页面渲染的数据

 logs: []

 },

 onLoad: function () {

  // 页面渲染后  执行

 }

})

Page 是一个页面构造器,这个构造器就生成了一个页面。在生成页面的时候,小程序框架会把 data 数据和 index.wxml 一起渲染出最终的结构,于是就得到了你看到的小程序的样子。

在渲染完界面之后,页面实例就会收到一个 onLoad 的回调,你可以在这个回调处理你的逻辑。

组件

小程序提供了丰富的基础组件给开发者,开发者可以像搭积木一样,组合各种组件拼合成自己的小程序。

就像 HTML 的 div, p 等标签一样,在小程序里边,你只需要在 WXML 写上对应的组件标签名字就可以把该组件显示在界面上,例如,你需要在界面上显示地图,你只需要这样写即可:

<map></map>

使用组件的时候,还可以通过属性传递值给组件,让组件可以以不同的状态去展现,例如,我们希望地图一开始的中心的经纬度是广州,那么你需要声明地图的 longitude(中心经度) 和 latitude(中心纬度)两个属性:

<map longitude="广州经度" latitude="广州纬度"></map>

组件的内部行为也会通过事件的形式让开发者可以感知,例如用户点击了地图上的某个标记,你可以在 js 编写 markertap 函数来处理:

<map bindmarkertap="markertap" longitude="广州经度" latitude="广州纬度"></map>

当然你也可以通过 style 或者 class 来控制组件的外层样式,以便适应你的界面宽度高度等等。

五、代码学习

1.Block标签:类似iOSfor循环的{}里面是循环内容

2.onLoad: function(options) 内容这个方法里面生成一个变量后,通过this.setData法这样并不能找到posts_content,需要给他找个key[图片上传失败...(image-856a09-1621998139831)]

下面是错误操作

image.png

冒泡事件:

Bindtap 点击后可能多次响应的,把程序结束掉在重新打开可以解决

入栈跳转:(最多有五级界面 )

image.png

模态跳转:

image.png

跳转tab界面:

 wx.switchTab({

 url: '../homePage/homePage',

 })

两种事件,bindtap不会禁止父view的点击事件,catchtap点击后父view的事件可以避免响应。

image.png

事件传递参数:

image.png

小程序中传递参数有一个固定的格式,(data-)-后面跟的是我们自定义的名字,可以有多个-,譬如data-postid-name-ddd,这里要注意一下,这是我们自定义的名字,当我们在js方法中取对应的参数时

image.png

这里有一个event的参数,在他下面有这样几个参数
image.png

其中dataset下的postid就是我们需要的参数,此外他会根据-把传递参数生成一个驼峰命名的参数

image.png
image.png

其中我们命名的data-postid-name-ddd就变成了
image.png

需要我们注意。

注意:
image.png

event事件中target与currenttarget的区别。

缓存:

利用缓存来存储数据,从而改变界面上的变化,缓存数据在关闭程序从新启动后仍然存在。

1.获取缓存数据:var postCollected = wx.getStorageSync('post_collected');

2.设置缓存数据:wx.setStorageSync('post_collected', postCollected),前面是key,后面可以是对象,或者是字符串;

3.小程序里面没有更新缓存数据的方法,若是更新,只需从新设置缓存数据即可。

小程序弹框:

image.png

小程序的弹框showToast是提示弹框,收藏成功,收藏失败。

showModal是alert,弹框提示不会自动隐藏


image.png

这里注意this作用域的问题,setData方法只是在page的方法下才能调用,而
image.png

已经跳出我们的作用域,所以需要用that赋值一下。

请求:

image.png

header 需要注意application/json 请求不到数据

模块:

image.png

当用到template模块开发时,如果需要对模块进行样式修改,不能[图片上传失败...(image-7694af-1621998139830)] 来写,因为找不到对应的view,必须像上面一样在外面套一层view,对外层的view进行修改

不同的條件加載不同的圖片:

image.png

新的数据绑定方式:

image.png
image.png

for循环千万不能有空格,避免一些奇葩问题(踩过的坑慎用)

注意存数据的问题:

image.png
image.png

打印结果并没有readyData,因为
image.png

这句话的意思是
image.png

,两者的意思是一样的,所以data中不存在readyData。

界面传值问题:

image.png

通过?在后面拼接我们需要传的字段。

具体界面传值可以看:https://www.jianshu.com/p/0135769db89c

margin的使用:

先看margin,margin有4个值:margin:10px 11px 9px 8px; ,按顺序分别代表对象与父容器的上、右、下、左的距离值为10px,11px,9px,8px。
如果只写两个值:margin:10px 5px; ,表示对象与父容器的上下距离值都是10px,与左右的距离值都是5px。
那么这时候我们来看margin:0 auto; ,这个就表示上下的距离值是0,而左右就是自动适应,也就是我们常说的自动居中。
而你所说的margin:auto; , 就表示上下左右都自动适应。

image.png

position : absolute这个属性是让对象脱离文档流,及不按照顺序排列,悬浮在上面,绝对定位

四元表达式用法:

image.png

否则:的后面用()括起来继续用三目运算来写。

理解box-sizing属性border-box,content-box

image.png

保持里面内容不变,增加padding

image.png

找到同级最后一个元素。

setDatathis.data.this.之间赋值的区别:

Setdata-会对界面进行渲染,及赋值后通过数据绑定更新数据然后刷新界面;

this.datathis.只是对属性进行赋值,并不进行界面渲染,但是他们赋值的层级是不一样的,this.data.是把对象放在了data:{}的目录下,this.是放在外层。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容