• 微信小程序基础知识


    一、基本目录结构

    app.js 定义app入口

    app.json 定义页面配置

    index.js 页面中的事件和监听

    index.wxml 定义布局文件

    1.app.json配置基本信息

    {

             “pages”:[ //配置目录信息

             “pages/index/index”, //第一条即是程序启动的首页

             “pages/logs/logs”

       ],

       “window”:{ //窗口样式

             “backgroundTextStyle”:”Light”,

             “navigationBackgroundColor:”#fff”,

             “navigationBarTitleText”:”WeChat”,
                       “navigationBarTextStyle”:”black”

      },

          "tabBar": {  //底部菜单栏配置

       “color”:”#333”, //字体颜色

          "list": [{

              "pagePath": "pages/index/index",

                 “iconPath”:”images/icon.png”,

             "text": "首页"

         }, {

              "pagePath": "pages/logs/logs",

              "text": "日志"

           }]

       },

        "networkTimeout": {  //网络超时配置

          "request": 10000,

          "downloadFile": 10000

         },

        "debug": true

    }

    2.app.js配置全局方法并调用 //页面加载后自动执行

    var config={

             onLaunch:function(){

               var logs=wx.getStorageSync(‘logs’)||[];

               logs.unshift(Date.now())

               wx.setStorageSync(‘logs’,logs)

      },

    getUserInfo:function(cb){

             var that=this;

             if(this.globalData.userInfo){

               typeof cb==”function”&&cb(this.globalData.userInfo)

       }else{

                wx.login({

                       success:function(){

                                wx.getUserInfo({

                                         success:function(res){

                       that. globalData.userInfo=res.userInfo

              }

            })

           }

         })

          }

    },

    globaolData:{

             userInfo:null

    }

    }

    App(config); //传入config参数

    3./pages/index/index.js 配置页面入口

    var app=getApp(); //获取app.js对象

    var pageConfig=({

             data:{

             motto:”Hello World”,

             userInfo:{}

    },

    //事件处理函数

    bindViewTap:function(){

             wx.navigateTo({

             url:’../logs/logs’

    })

    },

    onLoad:function(){

             var that=this;

             //调用应用实例方法获取全局数据

             app.getUserInfo(function(){

                       //更新数据

                       that.setData({

                                userInfo:userInfo

       })

      })

    },

    testClick:function(){  //绑定一个自定义的方法

             App. getUserInfo()  //调用App中设置的方法

    }

    })

    Page(pageConfig); //页面初始化

    4. /pages/index/index.json当前页面配置 //只能配置相关window显示,覆盖app.json中的配置

    {

             “backgroundTextStyle”:”dark”,

             “navigationBackgroundColor:”#fff”,

    }

    5. /pages/index/index.wxss当前页面css设置 //覆盖app.wxss中的设置

    6./pages/index/index.wxml 配置页面逻辑与ui

    二、视图与渲染

    1.快速配置一个页面

    ①在pages目录下新建一个文件firstPage,再创建first.js和first.wxml

    ②在app.json中配置页面信息

              “pages”:[ //配置目录信息

             “pages/index/index”,

             “pages/logs/logs”,

             “pages/first/first”,

    ]

    ③在first.js中添加Page(); //页面初始化

    ④在first.wxml中写入需要显示的信息 //页面初始化

    2.小程序的标签

    ①条件标签wx:if,wx:else

    ②{{data}}双花括号展示数据  //数据来自Page函数中的data

    <view class="container">

      <view class="userinfo">

        <button wx:if="{{!hasUserInfo && canIUse}}"> 获取头像昵称 </button>

        <block wx:else>

          <image src="{{userInfo.avatarUrl}}" background-size="cover"></image>

          <text class="userinfo-nickname">{{userInfo.nickName}}</text>

        </block>

      </view>

    </view>

    ③循环标签wx:for

    <view wx:for=”{{[‘aaa’,’bbb’,’ccc’]}}”></view>

    //第二种写法

    <view wx:for=”{{[‘aaa’,’bbb’,’ccc’]}}” wx:for-item=”item” wx:for-index=”ix”>

             {{ix}} – {{item}}

    </view>

    3.使用模板

    方法一:

    1.在pages/目录下,新建页面,如:/templates/header.wxml

    2.在其他任意页面使用<include src=”../templates/header”/>引入该模板

    方法二:

    1.在pages/目录下,新建页面,如:/templates/header.wxml

    2.在该页面中声明几个带有name的版本标签

    < template name=”header1”>这是模板1</ template >

    < template name=”header2”>这是模板2</ template >

    3.在其他任意页面使用:

             <import src=”../templates/header” />

             < template is=”footer1” />

    动态导入数据到模板:

    调用模板页:

             <import src=”../templates/header” />

             < template is=”footer1” data=”{{text:’这是导入的数据信息’}}”/>

    模板页:

    < template name=”header2”>

               {{text}}

    </ template >

    三、小程序事件

    1.bind与catch绑定点击事件,catch会阻止事件冒泡

             <view class=”view1” bindtap=”view1click”></view>  //会冒泡

    <view class=”view1” catchtap=”view1click”></view>  //不会冒泡

    view1函数写在该页面js文件中即:

    Page({

             view1:function(){

             console.log(‘click’);

    }

    })

    2.事件对象

    <view class=”view1” bindtap=”view1clickdata-title=”titletest” data-id=”100”></view>

    Page({

             view1:function(event){

             console.log(event);

    }

    })

    currentTarget: 绑定事件的组件

    target: 发生事件的组件

    事件的数据源传递:

    在currentTarget下有dataset

    其中dataset为{id:”100”,title:”titletest”}

    元素的值如input中的值,在currentTarget下的detail.value之中

    四、小程序的生命周期

    1.App.js定义的全局生命周期及方法

    App({

      onLaunch: function(options) {

        //小程序加载的时候

      },

      onLoad:function(options){

         //数据加载完成

     },

      onReady:function(){

         //页面渲染完成

      },

      onShow: function(options) {

          // 小程序前台显示的时候调用

      },

      onHide: function() {

          // 小程序进入后台运行的时候调用

      },

      onUnload: function() {

          // 页面被卸载

      },

      onError: function(msg) {

        console.log(msg)

      },

      userSetF:function(){}, //自定义的全局方法

      globalData: {}  //全局数据对象

    })

    2.写在每个页面的Page中则是当前页面的方法和周期

    五、页面之间的跳转路由

    1.调用方法跳转

             wx.navigateTo({  //当前页面不关闭,打开新页面并跳转

                       url:”../logs/logs?id=100” //传递参数到新页面

    })

             wx.redirectTo({  //关闭当前页面,打开新页面并跳转

                       url:”../logs/logs?id=100” //传递参数到新页面

    })

    2.标签跳转

      <navigator url=” ../logs/logs?id=100” redirect> //设置redirect属性

             <text>点击跳转</text>

             </ navigator >

    3.新页面接收传递过来的参数:

             Page({

                         onLoad:function(options){ //在生命周期函数onLoad中参数会接收url传递过来的数据

                            console.log(options)

    },

    })

    六、小程序UI组件

    1.页面的布局支持两种

    flex布局:

    相对绝对定位布局:   
    使用单位rxp,微信小程序特有的像素单位,会自动适配屏幕

    2.页面的基础组件

    视图容器组件:view;scrooll-view;swiper

    view:基础视图容器,可以理解为div

    scroll-view:带滚动条的容器,上下滚动需要设置高度

             属性scroll-into-view=”{{intoview}}” ,可以设置intoview为某个id

    swiper:轮播图容器

    icon组件

    text组件

    progress进度条组件

    表单组件:button checkbox input label picker radio slider switch form

    picker:下拉选框

    slider:滑块

    form:属性form-type

    3.操作反馈组件

    action-sheet //模态底部选择框

    <action-sheet hidden=”{{actionSheetHidden}}” bindchange=”actionSheetChange”>

    //通过数据控制是否显示隐藏

             <action-sheet-item data-name=”item1”>item1</action-sheet-item>

    </action-sheet>

    modal //模态框

    <modal confitm-text=”确认” cancle-text=”取消” hidden=”{{modalHidden}}” bindConfirm=”modalChange” bindCancel=”modalCancel”></modal>

    toast //弹窗提示

    <toast hidden=”{{toastHidden}}” duration=”3000” bindchange=”toastChange”></toast>

    loading //弹窗提示

    <loading hidden=”{{loadingHidden}}”>加载中…</loading>

    4.导航跳转组件navigator(类似a标签,微信无a标签)

    <navigator url=” ../logs/logs?id=100” redirect> //设置redirect属性

             <text>点击跳转</text>

             </ navigator >

    5.多媒体组件

    image video audio

    6.地图组件

    map

    7.画布与游戏组件

    canvas

    七、小程序API(基础部分API)

    1.请求服务器数据

    wx.request({

             url:””,

             data:{},

             header:{ //请求头信息

                       ‘Content-Type’:’application/json’

    },

             success:function(res){},

             fail:function(res){}

    })

    2.图片选择与微信拍照

    wx.chooseImage({

             count:1, //选择图片张数,最多为9张

             sizeType:[‘origina’,’compressed’],//设置是原图还是压缩图片

             sourceType:[‘album’,’camera’],//设置来源是相机还是相册

             success:function(res){

             var tempFilePath=res.tempFilePaths;

             //设置全局data的值,改变显示效果

             that.setData()

    }

    })

    3.文件上传与下载

    上传文件:
    wx.chooseImage({

             count:1, //选择图片张数,最多为9张

             sizeType:[‘origina’,’compressed’],//设置是原图还是压缩图片

             sourceType:[‘album’,’camera’],//设置来源是相机还是相册

             success:function(res){

             var tempFilePath=res.tempFilePaths;

             //设置全局data的值,改变显示效果

                       wx.uploadFile({  //上传图片

                       url:’’,

                       filePath:’ tempFilePath[0]’,

                       name:’file’,

                       formData:{

             ‘user’:’test’

       }

    })

    })

    下载文件:

             wx.downloadFile({  //上传图片

                       url:’’, //文件下载地址

                       type:’image’, //获取文件的类型,一共三总:image/audio/video

                       name:’file’,

                       success:function(res){

             console.log(res. tempFilePaths)

       }

          })

    4.websocket

    //开启链接

             wx.connectSocket({

             url:’’,

             method:’GET’,

             success:function(res){

    }

    })

    //发送消息

             wx.sendSocketMessage({

             data:”你好我是小程序”,

             success:function(res){

        },

    fail:function(){},

    complete:function(){

    }

      })

    //监听服务器返回消息

             wx.onSocketMessage(function(res){

             console.log(res)

    })

    //关闭链接

             wx.onSocketClose(function(res){

             console.log(res)

    })

    5.音乐播放和控制

    //播放音乐

             wx.playBackgroundAudio({

             dataUrl:”http://”,

             success:function(res){

      },

    fail:function(){},

    complete:function(){

    }

      })

    //监听音乐播放

             wx.onBackgroundAudio(function(res){})

    6.缓存数据(有最大限制,用户退出不会清除)

    //添加缓存

             wx.setStorageSync(‘’log’,logs) //同步设置

             wx.setStorage (‘’log’,logs) //异步设置

    //获取缓存

             wx.getStorageSync(‘’log’ )

    //移除缓存

             wx.removeStorage(‘’log’ )

    7.位置信息

    //获取当前位置

             wx.getLocation({

                       type:’wgs84’, //使用gps类型的坐标

     success:function(res){

                                var latitude=res.latitude  //获取坐标的返回值

                                var longitude=res.longitude

                                wx.openLocation({  //打开地图

             latitude: latitude,

             longitude: longitude,

             scale:10

           })

                                wx.chooseLocation({  //用户选择坐标

             success:function(res){

                       //success

            },

     fail:function(res){

     },

     complete:function(res){

     },

           })

                               

        }

      })

    8.设备相关API

    //获取网络信息

                       wx.getNetworkType({ 

    success:function(res){

             console.log(res)//success

    },

     })

    //获取设备信息

                       wx.getSystemInfo({   

    success:function(res){

             console.log(res)//success

    },

           })

    //获取重力感应,每秒调用5次

                       wx.onAccelerometerChange(function(res){})

    //获取罗盘信息,每秒调用5次

                       wx.onCompassChange(function(res){})

    //拨打电话,

                       wx.makePhoneCall({

             phoneNumber:’134000000’

       })

    9.交互API

    //弹出提示框

             wx.showToast({

                       title:’成功’,

                       icon:’success’,

                       duration:2000

      })

    //弹出模态框

             wx.showModal({

                       title:’提示’,

                       content:’这是一个模态弹窗’,

                       success:function(res){

             if(res.confirm){

               console.log(‘用户点击确定’)

             }

      },

    })

    10.导航和导航条API

    //设置导航条信息

      wx.setNavigationBarTitle({

                       title:’这是title’,

                       success:function(res){

          }

      })      

      wx.showNavigationBarLoading()

    //导航条跳转设置

      wx.navigateBack(OBJECT)

      wx.navigateTo(OBJECT)

    11.动画API

    在wxml中的标签添加数据

    <image animation=”{{animationData}}”></image>

    page({

             data:{

                       animationData:[]

      },

      bindViewTap:function(){

      //第一步创建动画

             var animation=wx.createAnimation({

             duration:3000,

             timingFunction:’linear’,

             delay:0,

             transformOrigin:’50% 50% 0’ //初始位置

         })

    //第二步设置动画行为

    animation.rotate(90).step();

    //第三步将设置的动画绑定到需要显示的元素的data上

    this.setData({animationData: animation.export()})

      }

    })

    12.绘图(canvas)

             var context=wx.createContext()

             context.rect(5,5,25,25)

             context.stroke()

             context.scale(2,2)

             context.stroke()

             wx.drawCanvas({

                       canvasId:’firstCanvas’,

                       action:context.getActions()

      })

  • 相关阅读:
    解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)
    解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)
    解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
    解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
    解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
    解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
    解剖SQLSERVER 第九篇 OrcaMDF现在能通过系统DMVs显示元数据(译)
    解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
    解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
    解剖SQLSERVER 第三篇 数据类型的实现(译)
  • 原文地址:https://www.cnblogs.com/Tabb/p/9133958.html
Copyright © 2020-2023  润新知