微信小程序注册程序App()-这个方法不能用有坑


注册程序

App() 函数用来注册一个小程序。接受一个 object 参数,其指定小程序的生命周期函数等。App() 必须在 app.js 中注册,只能注册一个。使用this可以拿到app实例。

App({
  d: {
    token: 1,
    appId: " ",
    appKey: " ",
    hostUrl: 'http://xxx.com/',
    hostImg: ' http://xxx.com/upload/',  
  },

  onLaunch: function () {
    var that = this;
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs);
    var token = wx.getStorageSync('token');
    that.d.token = token;
    if(!token){
      this.getUserInfo();
    }    
  },

  //登录并获取用户信息
  getUserInfo:function(cb){
    var that = this;
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo);
      console.log(this.globalData.userInfo);
    }else{
      //调用登录接口获取登录凭证code
      wx.login({
        success: function (res) {
          var code = res.code;
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo;
              console.log('以下是app.js从微信端获取的用户信息');
              console.log(res.userInfo);
              wx.setStorageSync('nickName', res.userInfo.nickName);
              wx.setStorageSync('avatarUrl', res.userInfo.avatarUrl);   
              wx.setStorageSync('city', res.userInfo.city);
              wx.setStorageSync('country', res.userInfo.country);   
              wx.setStorageSync('province', res.userInfo.province);   
              typeof cb == "function" && cb(that.globalData.userInfo);
              that.getUserSessionKey(code);
         
            }
          });
        }
      });
    }
  },

  //获取会话密钥
  getUserSessionKey:function(code){
    var that = this;
    wx.request({
      url: that.d.hostUrl+'public/wxAppUserCodeComes',
      method:'post',
      data: {
        code: code
      },
      header: {
        'Content-Type':  'application/x-www-form-urlencoded'
      },
      success: function (res) {      
        var userData = res.data.data;
        var userDataInfo = userData.user_info;
        console.log('以下是app.js用code换取了token 和open_id和session_key 如果绑定了还会返回user_name real_name等其他信息')
        console.log(userData);    //token   user_info{wx_app_open_id ,wx_app_session_key}
        var token = userData.token;  
        var userId= userDataInfo.wx_app_open_id
        //客户端存储token 
        wx.setStorageSync('token', token);
    
        if (!userId) {
          wx.showToast({
            title: '登录失败!',
            duration: 3000
          });
          return false;
        }
        that.d.token = token;
        that.onLoginUser();
      
      },
      fail:function(e){
        wx.showToast({
          title: '网络异常!err:getsessionkeys',
          duration: 2000
        });
      },
    });
  },

  //上传用户信息
  onLoginUser:function(){
    var that = this;
    var user = that.globalData.userInfo;
    var token = that.d.token;
    wx.request({
      url: that.d.hostUrl + 'public/updateWxUserInfo',
      method:'post',
      data: {
        token: token,
        nick_name: user.nickName,
        avatar_url: user.avatarUrl,
        gender:user.gender,   
        city:user.city,
        province: user.province,
        country:user.country,        
        language:user.language
      },
      header: {
        'Content-Type':  'application/x-www-form-urlencoded'
      },
      success: function (res) {    
        //console.log(res.data);   OK done:true
        console.log('以下是app.js上传用户信息后打印的全局用户数据');
        console.log(that.globalData.userInfo);
        var data = res.data;     
      },
      fail:function(e){
        wx.showToast({
          title: '网络异常!err:authlogin',
          duration: 2000
        });
      },
    });
  },

 globalData:{
    userInfo:null,
    products: [],
    carts:[]   
  },

  onPullDownRefresh: function (){
    wx.stopPullDownRefresh();
  }

});

小程序的生命周期函数

属性 类型 描述 触发时机
onLaunch Function 监听小程序初始化 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
onShow Function 监听小程序显示 当小程序启动,或从后台进入前台显示,会触发 onShow
onHide Function 监听小程序隐藏 当小程序从前台进入后台,会触发 onHide
onError Function 错误监听函数 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
其他 Any 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问

getApp()

全局的 getApp() 函数可以用来获取到小程序实例。

// other.js
var app = getApp()
console.log(app.globalData) // I am global data

你可能感兴趣的:(微信小程序注册程序App()-这个方法不能用有坑)