项目源码:https://github.com/saucxs/wx_...
微信小程序自从2017年,被各类看好,不过一段时间过去了仍是反响平平,下半年随着各项功能的开放,不少企业陆续接入了小程序,我以为就算是坑,我们也得踩踩。否则怎么从微信这个大流量体系中推广引流。css
小程序内部能够理解成一个mvvm的框架,分为逻辑层和视图层,逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。html
最近微信小程序异常火爆,不少人在学习,下面带着你们搭建下微信小程序的调试环境(client+server),并调试入门练手项目--通信录(phoneBook)(JavaScript和node.js基础便可,微信推荐使用的语言,去菜鸟教程简单学习下 JavaScript,node.js,mysql,nginx便可),方便你们学习。vue
官方解释:微信小程序是一种全新的链接用户与服务的方式,它能够在微信内被便捷地获取和传播,同时具备出色的使用体验。node
小程序是一种不须要下载安装便可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下便可打开应用。能够理解成一套嵌套在微信里面的app,和原生app不一样的是不须要下载,属于小而轻的应用。mysql
能够参考快速新建简单的koa2后端服务 这篇文章,教会你快递创建简单的koa后端服务。nginx
(1)注册帐号 git
(2)下载开发者工具, 下载1.02.x这个版本的,最新版的有bug,编译的时候调试器Wxml窗口会出现空的page标签,里面没有内容。es6
(3)注册好后登陆下微信公众平台|小程序,在设置里找到开发设置,把appID保存下来,一会开发的时候须要用到github
一、此时,工具备了,ID有了,接下来开始咱们的撸码之旅。打开开发者工具,扫码登陆后选择小程序项目,点击右下角的加号,建立新项目,选择项目目录,填写appID,项目名称,写好后点击肯定。sql
二、肯定之后,默认打开后,发现给咱们建立了一些代码。
三、设置不校验合法域名
这个设置是本地开发换环境下,进行开发调试的,必须勾上。
四、运行起来了
咱们主要看app.js、app.json、app.wxss三个文件和pages文件夹里面的wxml
一、app.js作为小程序的入口,里面有个App实例,每一个小程序只会有一个App实例,小程序启动之后触发onLaunch函数执行,获取用户信息
二、app.json是小程序的全部全局配置,pages字段放置全部页面的路径,window字段定义全部页面的顶部背景颜色,文字颜色 详细配置请戳这里
三、app.wxss文件就是页面公用的样式,仅支持部分css选择器
四、wxml就是咱们的HTML文件,经常使用标签为 view 、text 等,没有所谓的div、span、p一类的标签了,咱们习惯称它们为组件
分为逻辑层和视图层,逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
// pages/login/login.js const app = getApp(); Page({ /** * 页面的初始数据 */ data: { phone: '', password: '', isError: false, errorText: '' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { }, /** * 输入手机号 */ bindPhoneInput: function(item){ this.setData({ phone: item.detail.value }) }, /** * 输入密码 */ bindPasswordInput: function (item) { this.setData({ password: item.detail.value }) }, /** * 点击登陆按钮 */ login: function (item) { if(this.data.phone === '' || this.data.password === ''){ this.setData({ isError: true, errorText: "手机号码或密码不能为空" }) return; } let that = this; wx.request({ url: `${app.globalData.apiUrl}/login`, data: { phone: this.data.phone, password: this.data.password }, method: "POST", success: function(res){ if(res.data.success){ wx.setStorageSync("USERID", res.data.userID); wx.switchTab({ url: '/pages/department/department', }); }else{ that.setData({ isError: true, errorText: "请输入正确的手机号码或密码" }) } }, fail: function(item){ console.log(item) }, complete: function(item){ console.log(item) } }) },
使用Page函数来注册一个页面,接收一个Object参数。
这里咱们使用了onLoad来监听页面的加载,
定义了一个输入手机号bindPhoneInput函数 ,并使用setData函数将text的值进行更改,
定义一个输入密码bindPasswordInput函数,并使用setData函数将text的值进行更改,
定义一个登录按钮login函数,经过wx.request方法请求后端服务接口,经过wx.setStorageSync方法将请求的结果加入到storage中,经过wx.switchTab方法跳转到相应的路由。
<!--pages/login/login.wxml--> <view class="container"> <view class="login-container"> <text class="app-title">系统</text> <form class="login-form"> <view class="section"> <input name="phone" type="number" bindinput="bindPhoneInput" maxlength="11" placeholder="手机号码" /> </view> <view class="section"> <input name="password" bindinput='bindPasswordInput' type="password" password="true" placeholder="密码" /> </view> <text class="{{ isError ? 'error' : ''}}">{{errorText}}</text> </form> <view class="section"> <button bindtap="login">当即登陆</button> </view> </view> </view>
更改data数据的时候必须调用setData函数进行更改,咱们在button组件上添加了点击事件,调用了login函数。
相应的事件能够参考官方文档:https://developers.weixin.qq....
有时候咱们须要触发事件的时候,传递一些参数,那小程序怎么传递呢?很不幸,小程序不能相似js里面直接传递,每每咱们须要将传递的数据绑定到事件元素上。
// index.wxml <button data-test="哈哈" bindtap="change">点击我</button> 使用e.currentTarget.dataset来获取值 // index.js change(e){ e.currentTarget.dataset.test // 哈哈 }
小程序里面全部的页面路由由框架进行管理
咱们可使用getCurrnetPages函数获取当前页面栈的实例,返回一个数组, 最后一个元素为当前页面
小程序定义了五个用于导航跳转的API,这里列举两个经常使用的
一、wx.navigateTo 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack能够返回到原页面
wx.navigateTo({url:`/pages/text/index?text=${saucxs}`})
二、wx.redirectTo 关闭当前页面,跳转到应用内的某个页面
wx.navigateTo({url:`/pages/text/index?text=${saucxs }`})
经过上面的API跳转带的参数,在页面上咱们须要怎么获取呢?
// text.js Page({ data:{ ... // 页面数据 }, onLoad(options){ console.log(options.text) // saucxs 获取上个页面带过来的值 } })
若是你使用过vue、angular框架,对|管道符确定不陌生,它用来对咱们的数据进行转换,那小程序里面有没有过滤器呢,不过这个是真没有。
可是目前有两种方法,能够实现过滤。
一、获取数据的时候,直接改了,干脆利落、好不优雅。
二、使用最后咱们要介绍的wxs
WXS是小程序的一套脚本语言,首先和js是不一样的语言,其次运行环境和js也是隔离开的,wxs不能调用js文件中的函数,也不能调用小程序的API,它主要用来加强wxml。
wxs不能使用es6语法,接下来咱们来实现一个使用wxs实现一个简单的过滤器。
一、首先咱们建立filter.wxs文件并写入如下内容
// filter.wxs var Filter = { getSatusStr: function(num){ var str = ''; switch (num) { case 0: string = '待支付' break; case 1: string = '已支付' break; default: string = '待发货' break; } return str } } module.exports = { status: Filter.getSatusStr }
同级下index.wxml使用
<wxs module="filter" src="./filter.wxs"></wxs> <view wx:for="{{list}}"> <view>{{filter.status(item.status)}}</view> </view>
总结:
一、每一个wxs标签都有一个module 属性
二、wxs能够写在wxml里面的wxs标签里和.wxs文件里
三、wxs文件中引入其余wxs文件时候,可使用require函数,接受相对路径
四、在wxml标签里使用外部wxs文件的时候,src属性是相对路径。
微信小程序搭建环境必需的两点:云服务器,域名,下面给搭建演示若是在一台阿里云服务器上搭建微信小程序服务端环境。
能够参考这篇阿里云免费购买SSL证书,nginx无缝升级https:
https://www.mwcxs.top/page/43...
参考主要是申请和解析域名,以及将nginx的http跳转到https。
一、修改mysql配置
const pool = mysql.createPool({ host: 'xx.xx.xx.xx', port: '3306', user: 'root', password: 'xxxxxxxxx', database: 'wx_contactsadmin', connectionLimit: 100 })
host使用你的服务器外网IP,user数据库用户名,密码,以及数据库名称。
二、修改请求后端的url
在app.js
globalData: { userInfo: null, // apiUrl: 'http://localhost:8000/contact' apiUrl: 'https://phonebook.mwcxs.top/contact' }
三、使用pm2管理koa的服务
四、本地修改设置不校验合法域名
去掉不校验合法域名的勾选