一、序

  微信小程序,估计大家都不陌生,现在应用场景特别多。今天就系统的介绍一下小程序开发。注意,这里只从项目代码上做解析,不涉及小程序如何申请、打包、发布的东西。(这些跟着微信官方文档的流程走就好)。好了废话不多说,看目录。

  注: 小程序是一套特殊的东西,融合了原生和web端。他是一个不完整的浏览器对象,所以很多DOM 、 BOM 的东西无法使用,但是他又通过微信APP实现了多线程。

二、 目录

  1、如何创建一个微信小程序

  2、准备工作(让编译器支持小程序开发,我用的webstrom,hbuilderX也不错)

  3、基础文件目录详解

  4、创建常见的项目级别目录

  5、基础语法详解

  6、实现页面跳转

  7、wx.request 的封装

  8、使用 npm (引入 weui、moment等插件)

  9、封装微信小程序可复用组件

  10、总结

三、如何创建小程序

  很简单,首先下载微信开发者工具,下载稳定版本的就好。 下载  然后,创建小程序,可以参考下述图片:

            

  注意正式的小程序需要审批,拿到正式的APPID,我们测试的或者暂时没有的可点那个测试的appid,小程序模板选择默认就好。按照这样的流程走完,我们就创建完一个小程序了。

四、webstrom支持小程序开发

  创建完小程序之后,我们先不着急开发。工欲善其事必先利其器,微信开发者工具有点卡,而且功能少,开发效率很低。所以我们还是改造自己的编译器,这里只介绍2种方法。一是 hbuilderX,他有支持小程序的模块,很小巧的一款编译器; 二是 webstorm,我用的他,在这介绍一下配置的方法,其他的大家自行google吧。

  1、支持wxml和wxss的文件类型,有语法高亮。 打开webstorm编译器,依次点击    文件 -- 设置 -- 编辑器 -- 文件类型 , 找到 html文件,添加  *.wxml;  找到Cascading style Sheet ,添加 *.wxss。就OK了

  2、支持小程序代码提醒。 下载   这个文件,然后,把他放到一个显眼的地方; 然后, webstorm  点击  文件 -- 导入设置 ,找到这个下载的文件,点击确定即可。

  以上就是webstorm支持小程序语法的操作。

    

五、基础文件目录详解

  

  然后解释一下小程序的目录结构。

    project.config.json: 小程序的配置文件,包含项目打包配置、上传代码自动压缩等等,是一些开发、打包之类的配置。

    app.json: 当前项目的配置文件。包括项目的页面引入、导航条颜色、导航条标题 等等,是项目具体到代码开发上的配置。介绍几个配置:

        pages: 包含的页面。每次新增页面都得在这里引入,否则新页面的json配置等无法生效。 注意pages中页面先写的先渲染,所以数组第一条也就是我们的首页。

        window: 配置所有页面导航条字体、颜色、背景色等

    app.js:   小程序入口文件。生成小程序实例,App({}), 通常在这获取用户信息、授权信息、定义全局变量等。

    app.wxss: 小程序全局 style 文件。对整个项目页面生效。通常规定项目的 字体、基础颜色,定义一些公共样式。

    utils:  工具函数目录。通常用来放一些公共的js方法。比如封装的request请求,一些别的处理数据什么的方法。

    pages: 小程序的页面目录。所有的小程序页面,都写在这里面。

六、完善项目目录

  上边大致解释了一下小程序的基础文件,现在按照常见的规范完善一下项目目录,这里面包含一些个人见解,有需要的参考即可。先看一下结果:

    

  现在解释一下这些目录:

    components: 我们封装的小程序可复用组件。

    constants: 一些项目中的常亮。

    image: 用到的图片。

    services: 用到的所有接口目录

  大致就新建了这几个,如果有别的需求,根据自己的情况增加。

  

七、基础语法详解

  现在大致解释一下小程序的语法。首先, 创建新页面,默认都创建 *.wxml   *.wxss  *.js   *.json  和我们平时写的代码差不多,都是html js css,多了个json配置文件

    *.json:常用的属性有2大块,navigationBarTitleText  相关的设置顶部标题的, usingComponents 引用的组件

    *.js: getApp() 获取小程序实例,拿全局变量等; Page({}) 创建页面; data 当前页面的变量;onLoad 生命周期,页面加载完毕。

    *.wxml:注意,小程序支持的标签很少,像 span 是支持的,div不支持,一般用view代替块级,span、text 代替行级。

    *.wxss:大部分css选择器不支持,支持的好像才5个,想支持less等得自己配置

    

// json文件
{
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black",
"navigationBarTitleText":"我的",
"usingComponents": {
"menu": "/components/menu/index"
}
} // js文件
const app = getApp()
Page({
data: {}, onLoad: function () {}, })

八、实现页面跳转

  和通常的web开发一样,小程序页面跳转页分2中,wxml中的vavigator标签,以及js的navigator相关的api。路由跳转的方法有好几个,这里不一一赘述了,常用的直接跳转

wx.navigateTo,重定向 wx.redirectTo等等,具体的请看官方文档。这里强调一下路由传参,很简单:
1、少量数据。直接问号传参。然后在目标页面的onLoad方法中通过options参数接收。
2、大量数据。直接塞到全局变量里面。

    

// wxml跳转页面
<navigator url="/pages/my{{item.path}}" class="navigator">
<image class="imgIcon" src="{{item.icon}}"></image>
<view class="navigator-text" data-id="{{item.key}}" bindtap="handleMenuTap">{{item.name}}</view>
</navigator> //js跳转页面
wx.navigateTo({
url: `/pages/my/appointDetail/index?_id=${this.data.marker.id}`
}) //路由传参如何接收
  onLoad: function (options) {
    console.log(options)
  },
 

九、wx.request 的封装

  在utils中新建request.js,简单封装了一下,一些数据要全局配置的都引进来,然后做了些错误的统一处理,没什么难度,不过要特别注意一下cookie的携带。具体代码如下:

  

const app = getApp()
export default function request(url, options = {}) {
return new Promise(function (resolve, reject) {
wx.request({
url: `${app.origin}${url}`,
method: 'GET',
...options,
data: options.data,
header: {
'content-type': 'application/json',
'cookie': wx.getStorageSync("cookie")
},
success: function (res) {
//重新授权登录
if (res.statusCode === 401){
wx.redirectTo({url: '/pages/login/index'})
return
}else if (res.statusCode !== 200) {
reject({ error: '服务器忙,请稍后重试', code: 500 });
return
} else {
if (url === '/api/cdz/user/weixin/login') {
const cookie = res.header["set-cookie"] || res.header["Set-Cookie"];
        
if (cookie) wx.setStorageSync("cookie", cookie);
}
resolve(res.data);
}
},
fail: function (res) {
// fail调用接口失败
if (url === '/api/cdz/user/weixin/login') {
const cookie = res.header["set-cookie"] || res.header["Set-Cookie"];
if (cookie) wx.setStorageSync("cookie", cookie);
}
reject({ error: '网络错误', code: 0 });
}
})
})
}

  然后我们使用的时候直接使用封装好的request方法,这样所有的api就封装成一个个函数。我们在页面中直接import引入调用即可。

  

import request from "../utils/request";
import { stringify } from "../utils/util" export function testPost(data) {
return request(`/api/test/post`, {
method: 'PUT',
data,
})
} export function testGet(data) {
return request(`/api/test/get`)
}

十、使用 npm (引入 weui、moment等插件)

  因为小程序使用的是不完整的浏览器对象,所以很多js包都是不好使的,比如jquery之类的。所以npm基本是废了,能用的依赖包很少,具体哪些能用得自己发掘了。这里还是要介绍一下小程序如何使用npm,毕竟有些包还是要用的。

  1、打开 微信开发者工具 -- 点击 详情 -- 勾选 使用npm模块

  2、打开命令行,进入项目的根目录下, npm init 初始化npm

  3、npm i 。。。安装你需要的依赖

  4、打开 微信开发者工具 -- 点击 工具 -- 点击 构建npm。 此时小程序会将 node_modules 文件编译打包,生成新目录 miniprogram_npm ,

  5、在需要用到的页面的js文件中,const moment= require('moment') 引入,直接使用即可

  6、最后记得忽略文件。新建 .gitignore 文件,node_modules 、 package_lock.json 等文件不需要上传,最好只保留小程序的npm构建包,用什么依赖也是的那个下载。这个到不是必须的

  ps: 特殊注意一下weui的引入,这个ui库是纯css的,没有js文件,所以他没法用npm引入,而是直接下载文件,我直接丢到根目录下,然后在 app.wxss 文件的开头引入

@import 'weui.wxss';,这样使用的

 

十一、封装微信小程序可复用组件

  现在篇幅有点太长了,这个另写一篇,有需要的可以去看。

十二、总结

  以上就是我开发小程序的一些经验和总结,希望能帮到你。另外,整套程序的骨架(业务代码删掉了)我会上传到github,下载 有需要的可以去下载,记得点个赞,哈哈。

  最后,我会另写一篇博客,写一下 如何封装小程序 组件,并附上 我开发小程序遇到的坑,以及对应的解决方法。

详解微信小程序开发(项目从零开始)的更多相关文章

  1. 详解微信小程序支付流程

    转发博主 https://blog.csdn.net/qq_38378384/article/details/80882980 花了几天把小程序的支付模块接口写了一下,可能有着公众号开发的一点经验,没 ...

  2. (转)微信小程序开发项目——笑话大全

    此项目是学习完微信小程序后实现的一个demo,采用聚合数据的免费api获取最新的文本笑话和趣图(图片和gif图)   项目地址:https://github.com/zhijieeeeee/wecha ...

  3. 微信小程序开发项目过程中的一个要注意事项

    在微信小程序开发过程中,有时候会用到常用的一些特殊字符如:‘<’.‘>’.‘&’.‘空格’等,微信小程序同样支持对转义字符的处理, decode属性默认为false,不会解析我们的 ...

  4. 这是一篇满载真诚的微信小程序开发干货

    1月9日零点刚过,张小龙与团队正式发布微信小程序.它究竟能在微信8.5亿用户中牵动多少人,现在还很难说.但对于创业者来讲,小程序无疑带来了新契机,以及服务“上帝”们的新方式. 从今天起,只要开发者登录 ...

  5. 微信小程序开发之详解生命周期方法

    生命周期是指一个小程序从创建到销毁的一系列过程 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面 先来看一张小程序项目结构 从上图可以看出,根目录下面有包含了app.js ...

  6. 微信小程序开发详解——小程序,大颠覆!

    微信小程序开发 联系 苏念 188.1414.7927  微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序  ...

  7. 微信小程序开发01 --- 微信小程序项目结构介绍

    一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...

  8. 微信小程序开发学习资料

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  9. 微信小程序开发入门篇

    本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果. 开发准备工作 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的& ...

随机推荐

  1. Appnium-API-Dvice

    Device Activity Start Activity Start an Android activity by providing package name and activity name ...

  2. Beta答辩总结

    组员名单 短学号 姓名 备注 409 后敬甲 组长 301 蔡文斌 315 黄靖茹 423 刘浩 317 黄泽 328 卢泽明 617 葛亮 344 张杰 348 朱跃安 链接汇总 组长博客:后敬甲 ...

  3. LibreOJ一本通题解报告

    网页跳转 解析啥的以后会有的 目录 ·T1活动安排 ·T2种树 ·T3喷水装置 T1活动安排 /* problem:yibentong10000 date:2019/4/21 author:Lonel ...

  4. 测试highlightjs主题1

    package top.shaoxiu.scheduleTask; import org.springframework.scheduling.annotation.EnableScheduling; ...

  5. SourceInSight自定义命令说明与应用

    1.自定义命名设置界面(Tool -> Custom Commands...) Command 显示当前选中命令的名字. 下拉列表中包含了所有的自定义命令. Run 命令行,当调用自定义命令时, ...

  6. __builtin_expect — 分支预测优化

    1.引言 在很多源码如Linux内核.Glib等,我们都能看到likely()和unlikely()这两个宏,通常这两个宏定义是下面这样的形式. #define likely(x) __builtin ...

  7. Python 实现 KD-Tree 最近邻算法

    这里将写了一个KDTree类,仅实现了最近邻,K近邻之后若有时间再更新: from collections import namedtuple from operator import itemget ...

  8. 002 html总结

    1.题目 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗? div+css的布局较table布局有什么优点? strong与em的异同? 你能描述一下渐进增强和优雅降级之 ...

  9. 关于<服务器>定义

    定义: 服务器,也称伺服器,是提供计算服务的设备.由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力.   服务器的构成:包括处理器.硬盘.内存.系统总线等,和 ...

  10. 防御xss 大致理解

    前端 发送留言内容 包含 js 代码 后台 管理员 查看 留言 代码被执行 拿到cookie 成功登陆 解决办法 对录入 进行相关的过滤处理 其他解决方法 正在学习中