前言:

  因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理。该篇博客主要记录的是在编写微信小程序时使用比较频繁,实用的一些方法和一些基本原理的概括。个人觉得把这些方法掌握好了,开发一个小型的微信小程序那是绰绰有余的啦。当然我这里并没有深入的对一些语言进行详细的概述,纯属个人总结,假如需要详细的微信小程序语法文档请移驾到:[https://developers.weixin.qq.com/miniprogram/dev/]

知识点:

向后端请求数据方法:

wx.request({})

wx.request({
url: 'https://xxx.com/api/GetData', //这里填写你的接口路径,注意一定要在微信小程序中授权过得https数字加密域名
method: 'get',//请求方式
header: { //接口口返回的数据是什么类型,这里就体现了微信小程序的强大,直接给你解析数据,再也不用去寻找各种方法去解析json,xml等数据了
'Content-Type': 'application/json'
},
data: {//请求数据
name: ''
},
success: function (res) {
if (res.statusCode == ) {//statusCode==200表示请求成功,有数据返回
//这里就是请求成功后,进行一些函数操作
console.log(res.data)//// 服务器回包内容
console.warn(res)
}},
fail: function (res) {
wx.showToast({ title: '系统错误' })
},
complete: () => {
wx.hideLoading();
} //complete接口执行后的回调函数,无论成功失败都会调用
});

通过凭证进而换取用户登录态信息:

wx.login({})

wx.login({
success(res) {
if (res.code) {
// 发起网络请求
wx.request({
url: 'https://test.com/onLogin',
data: {
code: res.code
},
method: 'post',
header:{'Content-Type':'application/json'},
success:function(res)
{
//得到用户openid
console.log(res.openid);
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})

小程序中三种变量声明方式(var,let,const):

var:全局变量
let: 块级变量,又称之为局部变量
const:块级作用域,当时它属于不变的常量

小程序应用生命周期:【详细概括:https://www.jianshu.com/p/0078507e14d3】:

小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。

data Object 页面的初始数据 
onLoad Function 生命周期函数--监听页面加载,首次进入会执行此方法进行数据加载,一个页面只会加载一次 
onReady Function 生命周期函数--监听页面初次渲染完成 
onShow Function 生命周期函数--监听页面显示,数据显示,每次打开页面都会加载一次 
onHide Function 生命周期函数--监听页面隐藏 
onUnload Function 生命周期函数--监听页面卸载

模块引入方式(require或者是import):

// 用 import 或者 require 引入模块
.import util from '../../../util/util.js'
.var Promise = require('../../../plugin/promise.js')

对应方法中通过定义var that=this;来代表当前方法的上下文对象:

为什么要这样做呢?

  在javascript语言中,this代表着当前的对象,而this在微信小程序中随着执行的上下文随时会变化。所以当在一个方法里面直接使用this的话会找不到这个方法中所指定的对象值,因为对应的上下文中的data值已经改变了。自然就没有了data属性,也没有了data.itemLists属性了。解决的办法就是复制一份当前的对象。

var that=this;//把this对象复制到临时变量that.

console.log(that.data.itemLists[res.tapIndex]);//使用that.data 属性

小程序缓存的那些事:

1.wx.setStorageSync(string key, any data)

2.wx.setStorage(Object object)

//本地缓存
wx.setStorage({
key: "cartResult",
data: cartResult
}) //小程序本地缓存
wx.setStorageSync(string key, any data) //通过key获取缓存中的对象值:
wx.getStorage({
key: 'cartResult',
success: res => {
if (res.data.length > ){
this.setData({
cartResult: true
});}
},
}) //清空对应缓存:
wx.removeStorageSync('cartResult') //清空小程序缓存
wx.clearStorageSync()

微信小程序列表渲染:

wx:for 控制属性绑定一个数组,
wx:for-item :当前数组变量名
wx:for-index 当前数组下标的一个变量名
wx:key:如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/>
中的输入内容,<switch/> 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。
//微信wxml列表循环:
<view wx:for="{{items}}" wx:for-index="index" wx:for-item="item">
{{index+}}、{{item.title}}
</view> //js中
page({
data:{
items:[{title:'小明'},{title:'小红'}]
}
})

小程序js中的数组 forEach 数据遍历:

data:{
objIndex:[{name:'小明'},{name:'小红'},{name:'小姚'}]
} //定义容器
let ContentArray=[];
//索引数据拼接
objIndex.forEach(function(item, index) { ContentArray.push({name:item}) });

小程序js中的数组 for 数据遍历:

let dList=res.data.list;
let array=[];
for(var i in dList)
{
//数组拼接
array.push({
id:dList[i].Id,
menu_logo: dList[i].CoverImgId,
menu_name: dList[i].CategoryName,
price: dList[i].SalesPrice
});
}

微信小程序模块化(向外暴露接口):

第一种方式:
fucntion sayGoodbye()
{
//相应逻辑
} //向外暴露
.module.exports{
sayGoodbye:sayGoodbye
}
.exports.sayHello=sayHello; 第二种方式:
//直接全部模块化
export default={
function sayHello(name) {
console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
console.log(`Goodbye ${name} !`)
} };

小程序事件方法【bindtab,catchtap,bindconfirm,bindfocus,bindblur,bindchange,bindinput】:

首先bindtab(相当于js中的onclick 点击事件)和catchtap的区别:

我们都知道bindtap和catchtap都是当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。但是bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

<view id="outer" bindtap="handleTap1">
outer view
<view id="middle" catchtap="handleTap2">
middle view
<view id="inner" bindtap="handleTap3">
inner view
</view>
</view> Page({
handleTap1:function(event){ //点击输出outer view bindtap
console.log("outer view bindtap")
},
handleTap2: function (event) { //点击输出middle view
console.log("middle view catchtap")
},
handleTap3: function (event) { //点击输出inner view bindtap middle view catchtap
console.log("inner view bindtap")
},
})
bindconfirm 是点击小键盘上的搜索按钮就触发要执行的方法
bindfocus: 指当我们的输入框获得焦点时触发,也就是鼠标或者手指点击到输入框时。
bindblur: 指输入框失去焦点是触发,也就是当我们敲击回车或手机上的完成又或者是点击屏幕上的空白处时触发。
bindchange: 这个事件官方文档中没有写,它的效果和bindblur一样,至于看名字我们可能觉得bindchange在输入框中的内容不改变时不会触发,但是亲测即使内容不改变,bindchange事件也一样会触发。
bindinput: 每输入一个字符都会进行一次检索,通常用于实时检索。但是这种方法对数据库的要求较高。
在bindblur或bindchange事件中我们通过event.detail.value获得swiper中的事件,左右滑动的时候,滑动结束会出发这个事件。

小程序数组的那些事(push,push.apply,concat):

push 遇到数组参数时,把整个数组参数作为一个元素;
concat 则是拆开数组参数,一个元素一个元素地加进去。
push 直接改变当前数组;concat 不改变当前数组。
//在原数组的同时,添加增加一个新的数据,如js中的append
goods.push.apply(goods, data); //将页面上面的数组和最新获取到的数组进行合并

通过bindtab点击事件,传值:

//其中data-id为自定义属性值,可以按照自己的参数名称进行定义

<button bindtab='getcoupons' data-id='{{id}}' data-index='{{index}}'>领取</button>

 //js中:
getcoupons(even){
//直接看输出
console.log(even);
const id=even.currentarget.id;
或者even.target.dataset.id
}

超链接传值:

<navigator url='/page/index?id'>调转</navigator>

//页面监听,数据加载事件
onload:function(options)
{
console.log(options.id)
}

小程序页面调转的那些事:

wx.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
wx.reLaunch 关闭所有页面,打开到应用内的某个页面
wx.redirectTo 关闭当前页面,跳转到应用内的某个页面
wx.navigateTo 保留当前页面,跳转到应用内的某个页面
wx.navigateBack 关闭当前页面,返回上一页面或多级页面

小程序自定义调转地址和背景图片的转发,分享:

  /**
* 用户单击右上角分享
*/
onShareAppMessage: function() {
let title = "你好"; //标题
let path = "pages/home/home?fartherPhone="+app.globalData.Phone; //页面路径
let imageUrl ='https://ad.yoweller.com/images/webimg/banner.jpg';//自定义图片地址
return {
title: title,
path: path,
imageUrl: imageUrl
}
}

小程序三目运算:

<view class="set-default">
<icon class="icon" type="{{item.isDefault == true ? 'success_circle' : 'circle'}}"/>
<text>默认地址</text>
</view> <text class="viewpager-title {{current == 0 ? 'area-selected' : ''}}" bindtap="changeCurrent" data-current="">{{provinceName}}</text>

小程序常用的弹窗提示:

//loading加载
wx.showToast({
title: '加载中',
icon:'loading',
duration:
)}
//操作成功弹窗
wx.showToast({
title:'成功',
icon:'success',
duration:
}) //confirm 提示框
wx.showModal({
title: '提示',
content: '这是一个模态窗口',
showCancel:false,//关闭取消按钮
success:function(res){
if(res.confirm){
console.log('弹框后点取消')
}else{
console.log('弹框后点取消')
}
}
})

微信小程序form表单的那些事:

<form bindsubmit='submit' bindreset='reset'>
<button formtype='submit'>submit</button>//提交
<button formtype='reset'>reset</button>//重置
</form> //首先使用form-type='submit'提交表单中的value数据时,需要在表单主键上加上name用作key
page({
submit:function(e)
{ }
})

清空对应Input文本框中的值:

//js
Page({
data: {
userInput: '',//定义文本框中的值
},
clearInput: function () {
this.setData({
userInput: ''
});
},
//通过检索input文本框改变事件进行及时赋值
bindKeyInput: function(e) {
this.setData({
userInput: e.detail.value
});
}
})

//wxml中
<input value="{{userInput}}" bindinput="bindKeyInput"></input>
<view bindtap="clearInput">点击清除输入框</view>

条件渲染(wx:if):

wx:if
在框架中,使用 wx:if="{{condition}}" 来判断是否需要渲染该代码块: <view wx:if="{{condition}}">True</view>
也可以用 wx:elif 和 wx:else 来添加一个 else 块: <view wx:if="{{length > 5}}"></view>
<view wx:elif="{{length > 2}}"></view>
<view wx:else></view>
block wx:if
因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个 <block/> 标签将多个组件包装起来,并在上边使用 wx:if 控制属性。 <block wx:if="{{true}}">
<view>view1</view>
<view>view2</view>
</block>

文本复制:

< text selectable=’true’ >< text/>  只有文本内容在text内才可以复制,在外面的不能被复制

总结:

   其实接触新得技术并不可怕,可怕的是你自己不知道该怎么去认识它。认识一门新语言的第一步是先主动去了解它的一些习性和特点。上面有一部分是来自于比较好的博客和微信小程序API文档,然后我根据自己的想法和心得做了注释和改变让自己加深一遍印象。

微信小程序开发笔记的更多相关文章

  1. 微信小程序开发笔记02

    今天学习了微信小程序开发用到的语言,wxml与wxss语言基本语法与html和css基本语法相似,学习起来相对简单.在小程序主要的语言是js(javascript,跟准确的说是jqery) ,由于这种 ...

  2. 微信小程序开发笔记01

    微信小程序开发的优势 1,不用安装,即开即用,用完就走.省流量,省安装时间,不占用桌面: 2,体验上虽然没法完全媲美原生APP,但综合考虑还是更优: 3,对于小程序拥有者来说,开发成本更低,他们可以更 ...

  3. 微信小程序开发笔记(一)

    一.为什么要学习微信小程序开发 微信小程序是一个可以在微信上打开的轻应用,他是由多个页面组成的程序,跟传统APP比较如下: 优点 1.不需要在应用商店下载,不占用内存空间,即开即用 2.可以在微信内直 ...

  4. 微信小程序开发笔记04

    今天将小程序的页面进行优化 消除昨天遇到的bug问题. 完成了微信小程序的开发.

  5. 微信小程序开发笔记(二)

    一.前言 继承上一篇所说的,有了对微信小程序的基础概念后,这边将会示范动手做一个小程序,在动手的过程中我们可以更快的熟悉小程序里面的架构和开发流程. 二.小程序的设计 这次要做的是一个猜数字的程序,程 ...

  6. 微信小程序开发笔记03

    今天基本实现了微信小程序主要功能,页面还没有进行优化,有些功能还需完善. 页面之间的信息转化部分还未实现.

  7. 微信小程序开发笔记2,底部导航栏tablebar

    底部导航(要在app.js里面配置,也就是把导航的代码写到app.js) 官方文档说最少2个导航最多5个 , "tabBar": { "color": &quo ...

  8. 微信小程序开发笔记1,认识小程序的项目构成

    省去安装和基本操作, app.js脚本文件 qpp.json配置文件(添加删除页面,都要在这个文件下修改入口配置) app.wxss样式表文件 app前缀为全局的 在app.json中配置项目的每个页 ...

  9. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

随机推荐

  1. Scrapy 1.4 文档 01 初窥 Scrapy

    初窥 Scrapy Scrapy 是用于抓取网站并提取结构化数据的应用程序框架,其应用非常广泛,如数据挖掘,信息处理或历史存档. 尽管 Scrapy 最初设计用于网络数据采集(web scraping ...

  2. Unable to find remote helper for 'https'

    出现这个报错,说明git目前的状态是正常的,要么没装好,要么自己解决压缩安装导致没有权限 第三次情况是,使用yum install git 重新安装后,仍然报错,是因为环境变量中GIT_HOM配置的仍 ...

  3. bootstrap table的样式

    <style> table{ border: 1px solid #ddd; background-color: transparent; border-spacing:; border- ...

  4. Linux上配置使用iSCSI详细说明

    本文详细介绍iSCSI相关的内容,以及在Linux上如何实现iSCSI. 第1章 iSCSI简介 1.1 scsi和iscsi 传统的SCSI技术是存储设备最基本的标准协议,但通常需要设备互相靠近并用 ...

  5. HTML5 FormData 方法介绍以及实现文件上传

    XMLHttpRequest 是一个浏览器接口,通过它,我们可以使得 Javascript 进行 HTTP (S) 通信.XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式. ...

  6. Python跨目录调程序

    #!/usr/bin/python # -*- coding: utf-8 -*- # 导入其它目录下的文件, 需要去帮获取当前程序的绝对路径并加入到环境变量的相对路径中 import os impo ...

  7. POJ_3304_Segments_线段判断是否相交

    POJ_3304_Segments_线段判断是否相交 Description Given n segments in the two dimensional space, write a progra ...

  8. b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子图

    b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子 题意:n*m个植物,每个植物有分数(可正可负),和能保护植物的位置.只能从右往左吃,并且不能吃正被保护着的,可以一个不吃,求 ...

  9. Linux下网站根目录权限

    网站根目录权限遵循: 文件644 文件夹755 权限用户和用户组www-data 如出现文件权限问题时,请执行下面3条命令: chown -R www-data.www-data /usr/local ...

  10. [AST实战]从零开始写一个wepy转VUE的工具

    为什么需要 wepy 转 VUE "转转二手"是我司用 wepy 开发的功能与 APP 相似度非常高的小程序,实现了大量的功能性页面,而新业务 H5 项目在开发过程中有时也经常需要 ...