搜索
您的当前位置:首页正文

每日一弹:小程序商城购物车

来源:二三娱乐

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方法返回

      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

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.对象的深拷贝方法

            - 用到再说

Top