1.登录的流程:
(1)wx.login获取临时登录凭证code.
(2)wx.getSetting(OBJECT),wx.getUserInfo()获取用户的授权信息,并回传到开发者服务器code,encryptedData ,iv。
(3)拒绝授权之后调用wx.openSetting,获取用户信息,向后台传信息。
wx.getSetting({ success: (res) => {
if (res.authSetting['scope.record'] || res.authSetting['scope.userInfo']) {//微信授权authSetting结果
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
/**
* 向后台发送 res 发送给后台解码出 unionId
*/
let encryptedData = res.encryptedData;
let iv = res.iv;
}
})
}})
2.ES6的promise用法
(1).微信小程序引入es6promise.js;
(2).网络层promise封装
export default class NetUtil{//static静态方法
static post(url,data){
return NetUtil.requestJson(url,data,"post");
}
static get(url,data){
return NetUtil.requestJson(url,data,"get");
}
static requestJson(url,data,method){
data=data||{};
return new Promise(function(resolve,reject){
wx.request({
"method":method,
"url":url,
"data":data,
"header":{
'Content-Type': 'application/json'
},
success:function(res){
resolve(res);
},
fail:function(err){
reject(err);
}
})
}
}
}
Promise.all()方法用于将多个promise实例,包装成一个新的Promise实例。
const p=Promise.all([p1,p2,p3]);
Promise.all方法接受一个数组作为参数,p1,p2,p3都是Promise实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator 接口,且返回的每个成员都是Promise实例。)
p的状态由p1,p2,p3决定,分成两种
(3).require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别。
module.exports初始值为一个空对象{};
exports是指向module.exports的引用。
require()返回的是module.exports而不是exports。
module.exports:模块化。
(4).let app=getApp();微信提供了全局的getApp()函数,可以获取到小程序实例或小程序注册实例中的方法。
(5).使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。
3.微信小程序富文本的用法:
(1).将下载下来的插件文件夹复制到我们的项目根目录下(其中emojis文件可根据自己所需决定要或者不要,其他的文件必须要)
(2).在需要用到该插件的view(.js)引入
var WxParse= require('../../../wxParse/wxParse.js');
(3).在需要用到的wxss中引入WxParse.wxss,也可以在app.wxss中引入(没有引入WxParse.wxss:span样式显示不正确)。
@import"../../../wxParse/wxParse.wxss";
(4).进行数据绑定
var article="我是HTML代码"
/**
WxParse.wxParse(bindName,type,data,target,imagePadding)
1.bindName绑定的数据名(必填)
2.type可以为html或md(必填)
3.data为传入的具体数据(必填)
4.target为Page对象,一般为this(必填)
5.imagePadding为当图片自适应是左右的单一padding(默认为0,可选).
*/
var that = this;
WxParse.wxParse('article', 'html', article,that, 5);
(5).在内容页(.wxml文件)中引用该模版文件,其中data中article为bindName。
导入文件
引用模版
4.组件模板和样式
组件模板的写法和页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。
在组件模板中可以提供一个节点,用于承载组件引用时提供的子节点。
注意,在模板中引用到的自定义组件及其对应的节点名需要在json文件中显示定义,否者会被当作一个无意义的节点。
组件wxml的solt
在组件的wxml中可以包含slot节点,用于承载组件使用者提供的wxml解构。
默认情况下,一个组件的wxml中只能有一个solt。要启动solt必须在json文件中开启{ "component": true}。
5.join的用法join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
join()方法用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔。
var arry=[aa,bb,cc];
document.write(arry.join());输出aa,bb,cc
6.concat用于连接两个或多个数组。
7.ES6中Set的用法
//Set结构的实例有四个遍历方法,可以用于遍历成员。
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员.
由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致.
let set =new Set(['red','green','blue']);
for (let item of set.keys()){
console.log("===",item);
}
// (2).forEach()
// Set结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值.
set=new Set([1,4,9]);
set.forEach((value,key)=>{
console.log(key);
})
8.Map结构的实例有以下属性和操作方法。
(1)size属性返回Map结构的成员总数。
const mapo=new Map();
mapo.set("aa",true);
mapo.set("bb",false);
mapo.size;//2
(2)set(key,value)
//set方法设置键名key对应的键值为value,然后返回整个Map结构.如果key已经有值,则键值会被更新,否则就新成该键.
const mp=new Map();
mp.set('edition',6)//键是字符串
mp.set(26,'standard')//键是数值
mp.set(undefined,'nah')//键是undefined
(3)get(key)
//get方法读取key对应的键值,如果找不到key,返回undefined
const m=new Map();
const hello=function(){
console.log('hello')
}
m.set(hello,'Hello ES6')//键是函数
m.get(hello)
(4)has(key)
//has方法返回一个布尔值,表示某个键是否在当前Map对象之中
const m=new Map();
m.set('edition',6);
m.set(262,'standard');
m.set(undefined,'nah');
m.has('edition')//true
m.has('years')//false
m.has(262)//true
m.has(undefined)//true
(5)delete(key)
//delete方法删除某个键,返回true。如果删除失败,返回false。
const m1=new Map();
m1.set(undefined,'nah');
m1.has(undefined);
console.log("===",m1.has(undefined));
console.log("delete",m1.delete(undefined));
(6)clear()方法清除所有成员,没有返回值。