zoukankan      html  css  js  c++  java
  • 微信小程序学习Course 1 微信小程序基本内容

    微信小程序学习Course 1 微信小程序基本内容

    微信小程序框架分析

    1.1 目录结构

    微信小程序采用的是和HTML类似的开发框架,主要依托四个文件:js文件、wxml文件、wxss文件、json文件。其中wxml是用来编写界面的标记性语言。换句话讲就是我们写wxml文件就可以编写出可视层的资源;wxss文件是样式表,主要用来去对可视层的文本或者其他控件资源的样式进行修改,譬如背景颜色等;而js文件是逻辑层语言是用来写界面上会出发的逻辑;json文件是配置文件,配置整个工程或者某个页面。

    微信小程序主目录机构包含三个根目录文件以及一个Page页面文件夹,如下图所示。

    其中三个根目录文件是app.js、app.json、app.wxss。

    app.json为主配置,配置整个小程序。

    我们可以看到page里面也有文件夹,其中每个文件夹都代表一个页面,在相应文件夹下都有其对应个一套页面文件js、json、wxml、wxss。

     

    1.2 配置文件详解(json)

    1.2.1主配置文件

    主配置文件为app.json文件,其中包括系统的一些配置。其中我们需要关注几个点就可以。

    1、"pages"参数

    此参数定义整个系统的所有页面,所有页面都需要在这里注册。注册的形式是将页面文件夹的位置填写在数组里面。如图定义了两个界面一个是index,另一个是logs。

    2、"windows"参数

    此参数定义窗口状态,包括背景颜色、导航栏文字、导航栏颜色等。此参数是一个对象属性。

    视图层参数有以下:

    backgroundColor背景颜色

    backgroundTextStyle设置字体样式

    以下三个参数用来设置导航栏参数

    navigationBarBackgroundColor导航栏背景颜色

    navigationBarTextStyle导航栏标题文字样式 可选black white
    navigationBarTitleText导航栏标题文字
      "window":{
        "backgroundColor":"#ff0000",
        "backgroundTextStyle":"light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "测试程序",
        "navigationBarTextStyle":"black"
      },
    

      

    3、窗口底部tabBar

    此参数定义窗口底部菜单栏项目,这是一个对象属性。

    如图所示包含主要的参数配置;

    主配置参数如下:

    color代表文字未被选择时的颜色

    selectedColor文字被选择时的颜色

    backgroundColor背景颜色

    borderStyle边框样式   

    list是一个数组参数,其配置几个菜单选项;每一个菜单选项需要包含以下参数

    pagePath  页面路径

    iconPath   图标路径

    selectediconPath被选后图标路径

      "tabBar":{
        "color":"#dddddd",
        "selectedColor":"#3cc51f",
        "list":[
          {
            "pagePath":"pages/index/index",
            "text":"首页"
          },
          {
            "pagePath":"pages/logs/logs",
            "text": "二页"
          }
        ]
      }
    

      

    4、Debug模式

    此参数可以设置为true,则进入debug模式。

    5、其他配置

    除上述通用配置之外还有一些和网络文件超时有关的配置。这个在之后使用时再阐述。

     

    1.2.2 页面配置文件

    1.2.1中讲述的是主页面配置文件,在每个页面文件夹中都会包含配置文件,例如index.json,这些文件是用来配置当前页面的配置文件,此页面会继承主页面的参数,其可配置的文件只有.windows参数。例如下面,因为只有windows参数所以直接大括号即可。

    {
      "navigationBarTitleText": "查看启动日志"
    }
    

     

    1.3  逻辑层文件(js文件)

    1.3.1 主逻辑层文件

    主逻辑层文件需要完成注册小程序的功能,其会对应提供一些生命周期函数。

    onLanuch小程序初始化完成后会触发。

    onShow小程序显示到屏幕时出发,或者从后台回到前台时出发。

    onHide小程序隐藏时触发。

    //app.js
    App({
      onLaunch: function () {
        // 展示本地存储能力
        var logs = wx.getStorageSync('logs') || []
        logs.unshift(Date.now())
        wx.setStorageSync('logs', logs)
    
        // 登录
        wx.login({
          success: res => {
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
          }
        })
        // 获取用户信息
        wx.getSetting({
          success: res => {
            if (res.authSetting['scope.userInfo']) {
              // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
              wx.getUserInfo({
                success: res => {
                  // 可以将 res 发送给后台解码出 unionId
                  this.globalData.userInfo = res.userInfo
    
                  // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
                  // 所以此处加入 callback 以防止这种情况
                  if (this.userInfoReadyCallback) {
                    this.userInfoReadyCallback(res)
                  }
                }
              })
            }
          }
        })
      },
      globalData: {
        userInfo: null
      }
    })
    

      

    1.3.2  页面逻辑层

    页面逻辑层需要完成初始化数据、页面生命周期函数,然后处理视图层的一些用户交互的逻辑处理。

    //index.js
    //获取应用实例
    const app = getApp()
    
    Page({
      data: {
        motto: 'Hello World',
        userInfo: {},
        hasUserInfo: false,
        canIUse: wx.canIUse('button.open-type.getUserInfo')
      },
      //事件处理函数
      bindViewTap: function() {
        wx.navigateTo({
          url: '../logs/logs'
        })
      },
      onLoad: function () {
        if (app.globalData.userInfo) {
          this.setData({
            userInfo: app.globalData.userInfo,
            hasUserInfo: true
          })
        } else if (this.data.canIUse){
          // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
          // 所以此处加入 callback 以防止这种情况
          app.userInfoReadyCallback = res => {
            this.setData({
              userInfo: res.userInfo,
              hasUserInfo: true
            })
          }
        } else {
          // 在没有 open-type=getUserInfo 版本的兼容处理
          wx.getUserInfo({
            success: res => {
              app.globalData.userInfo = res.userInfo
              this.setData({
                userInfo: res.userInfo,
                hasUserInfo: true
              })
            }
          })
        }
      },
      getUserInfo: function(e) {
        console.log(e)
        app.globalData.userInfo = e.detail.userInfo
        this.setData({
          userInfo: e.detail.userInfo,
          hasUserInfo: true
        })
      }
    })
    

      

     

  • 相关阅读:
    laravel-admin 关闭debug模式导致异常信息到页面的排查
    laravel-sql
    laravel任务调度出现僵尸进程
    PHP获取首字母笔记
    IP库笔记
    深入理解 js 闭包
    用键盘实现上下选择
    密码保护
    评分效果
    数组去重
  • 原文地址:https://www.cnblogs.com/flyingjun/p/9639512.html
Copyright © 2011-2022 走看看