开发头条小程序小总结~

402 阅读2分钟

一、基本介绍

1.小程序js的运行进程跟视图层的运行进程是独立的,小程序js的运行进程跟视图层的运行进程是独立的,但是js是异步更新视图的。且无法直接访问视图的Dom

2.在开发过程中应用4个文件:.js,.json,.ttml,.ttss建立文件名必须 路径相同,文件名相同

二、生命周期

1.Page生命周期

onLoad() // 监听页面加载的时候
onReady() //监听页面初次渲染完成
onShow() //监听页面显示
onHide() //监听页面隐藏
onUnload() //监听页面卸载

当进行页面跳转再返回当前页面的时候会有数据不更新的问题: 解决方法是可以把数据更新的方法放到onShow里面,会更新数据

2.App小程序的生命周期

onLaunch //小程序初始化
onShow //小程序显示
onHide //小程序隐藏
onError //错误监听函数
onPageNotFound //监听页面不存函数

三、组件中遇到的问题 -- map

1.map层级过高,导致设置页面的弹窗比map地图的层级底

<!-- 地图展示 -->
    <map
      id="myMapShare"
      show-location
      longitude="{{addressInfo.longitude}}"
      latitude="{{addressInfo.latitude}}"
      circles="{{addressInfo.circles}}"
      scale="{{addressInfo.scale}}"
      markers="{{addressInfo.markers}}"
    >
    </map>

    <!-- 弹窗,解决map地图层级过高问题,必须跟原生组件是兄弟关系 -->
    <view class="modal-bg" hidden="{{displayModal}}">
      <view class="modal-bg-fixed" bindtap='modalOpera'></view>
      <view class="modal-body">
        <view class="modal-title">请填写联系方式</view>
        <view class="modal-content-box clearfix">
          <image src="{{imgBaseAddr + 'icon_tel.png'}}"></image>
          <input type="number" placeholder="请输入手机号" 
          value="{{paramQueryTemp.workerMobile}}"
          bindinput='getWorkerMobile'
          />
        </view>
        <view class="modal-footer">
          <view class="modal-btn modal-confirm" catchtap='xhrSignUp'>好的</view>
        </view>
      </view>
    </view>
  </view>

解决方案:把弹窗设置成map的兄弟关系,然后设置z-index值大于map的z-index

2.请求接口的时候,map地图不展示的问题 因为map地图先于接口请求展示,当map地图展示的时候数据为异步,可以加计时器,或者是添加开关,当数据请求回来的时候再展示map组件。

四、手机号授权登录

1.首先先在抖音小程序申请手机号登录权限(针对个人不开放)

2.不能自动登录,需要通过按钮触发

<button
    open-type="getPhoneNumber"
    bindgetphonenumber="xhrGetPhoneNumber"
  >授权手机号快捷登录</button>

3.由于手机号返回的是加密信息,则触发之前需要调用tt.login获取code,获取完毕以后传给后台,需要后台拿到code去解密手机号,在此期间,code的失效期是3分钟,所以需要检测code的时效性,如果失去效果则重新获取。

//在onshow阶段调用
onShow: function() {
    this.xhrLogin()
},

xhrLogin(){
    var _this = this;
    tt.login({
      force: true,
      success(res) {
        let param = {
          code: res.code,
          anonymousCode: res.anonymousCode,
          userType: _this.data.from == 'cShareDetail' ? 20: 10, //是商户还是个人,商户传10个人传20
        }

        APIS.postLogin(param).then(res=>{
          if(res.statusCode === _this.data.httpCode.suc){
            console.log("把code传给后台")
          }
        })
      },

      fail(res) {
        console.log(res)
      },
    });
  },
  
  //xhr -- 获取手机号
  xhrGetPhoneNumber(e){
    var _this = this;
    tt.checkSession({
      success() {
        if(e.detail.errMsg == 'getPhoneNumber:ok'){
          let paramTemp = {
            encryptedData: e.detail.encryptedData,
            iv:e.detail.iv
          }
      
          APIS.postIphone(paramTemp).then(res=>{
            if(res.statusCode === _this.data.httpCode.suc){
              console.log("获取手机号成功!")
            }
          })
          
        }else{
          console.log('其他错误!!')
        }
      },
        
      fail() {
        console.log(`session 已过期,需要重新登录`);
        _this.xhrLogin()
      },
    });
  },
  
  

五、小程序自定义tabbar栏,iphonex底部适配问题

1.在公共app.js里面获取手机型号,根据型号解决不同的样式问题

tt.getSystemInfo({
  success: res => {
    let modelmes = res.model;
    console.log(modelmes)
    if (modelmes.search('iPhone X') != -1) {
      _this.globalData.isIphone = true
    }else{
      _this.globalData.isIphone = false
    }
  }
})

然后再根据isIphone设置不同的样式~~


项目还在进行中,希望大家期待下次的更新哦~