1.索引
1.对象索引是属性名
2.数组索引是下标
3.多重索引,典型的json数据就是
2.全选联动按钮
1.数据渲染复选框的布尔值
3.动态选中样式
1.在网页中的应有场景非常多。有tabbar、自定义复选框等。
2.需要改变的样式有:选中图片、背景色、字体颜色、边框颜色等。
4.promise封装网络请求为模块工具
function getStorage(key){//获取数据缓存
return new Promise(function (resolve, reject) {
wx.getStorage({
key: key,
success: resolve,
fail: reject
});
});
};
function getNetJson(url, params){//发送数据请求
return new Promise(function(resolve, reject){
wx.request({
url: url,
data: params,
header: {
'content-type': 'json' // 默认值
},
success:resolve,
fail: reject
});
});
};
module.exports = {//暴露模块接口
getStorage,
getNetJson
};
var app = getApp();//获取顶层实例
app.wxapis.getStorage('board_data').then()//调用模块接口
const wxapis = require('./utils/wxapis.js');//获取模块(app.js)
App({
wxapis
})
getCache() {//用于判断是否有无缓存
return new Promise((resolve, reject) => {
app.wxapis.getStorage('board_data').then((storage_res) => {
// console.log(storage_res);
if (storage_res.data.expires < Date.now()) {
// 因为已经过期,所以你调用的结果是null
return resolve(null);
} else {
return resolve(storage_res.data.all_info);
}
}).catch(function (err) {
return resolve(null);
});
});
},
getNetworkData() { // 用来获取请求网络数据
var promises = this.data.all_info.map(function(info){//数组的map方法返回
var url = "https://api.douban.com/v2/movie/" + info.requestUrl;
return app.wxapis.getNetJson(url, { count: 10 }).then((res) => {
console.log('进行了一次网络请求');
info.movies = res.data.subjects;
return info;
});
});
Promise.all(promises).then((infos)=>{//promise解决多条数据请求,最大并发限制是十条
console.log(infos);
wx.setStorage({
key: 'board_data',
data: {
all_info: infos,
expires: Date.now() + 1000 * 60 * 60 * 24
},
});
this.setData({
all_info: infos
});
});
},
onLoad: function (options) {//页面加载,判断是否有缓存。有则获取,无则请求
// this.getCache();
this.getCache().then((result) => {
if (!result) {
//没结果
this.getNetworkData();
} else {
this.setData({
all_info: result
});
}
}).catch((err) => {
this.getNetworkData();
});
},
5.跨页面传值
1 . 用 navigator标签传值或 wx.navigator
2.实例地址:https://www.jianshu.com/p/0135769db89c
6.tabBar栏中页面传值
a.在app.js中定义一个全局属性,他的属性值可用来保存全局数据。
b.用全局属性在onload函数中进行传值
7.列表页跳转详情页传id值
a.bindtap结合data-*把当前对象的id值获取到
b.navigator的url拼接参数传id值
8.Date.now()和new Date()的区别
1. Date.now()是构造函数的原型对象方法???
2.new Date()是构造函数实例化一个对象???
9.深拷贝&浅拷贝
1.有时候需要深拷贝一份给另外一个变量,不改变之前指针对应的对象
2.此时就需要用到深拷贝。
3.数组的filter返回一个新数组,不改变原来的数组结构,应该是深拷贝。
4. 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝
5.数组的深拷贝方法
- slice(0)
- arr.concat()
- for循环,依次push到一个空对象中
- es6扩展运算符实现: var arr = [1,2,3,4,5] var [ ...arr2 ] = arr
6.对象的深拷贝方法
- 用到再说
网友评论