精华内容
下载资源
问答
  • 微信小程序常用api
    千次阅读
    2021-09-08 11:46:36

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。[[点击跳转到网站。]]

    小程序Api

    App

    全局入口,整个小程序项目中,只允许有一个App入口函数。

    全局数据

    • globalData:写在全局的js里

    • 使用this.globalData.data

    私有的生命周期【全局的生命周期】

    • onLaunch:初始化函数

    • onShow:启动或切换前台

    • onHide:小程序后台运行

    Page

    私有的生命周期【页面的生命周期】

    • onLoad:页面加载

    • onShow:页面显示

    • onHide:页面隐藏

    • onReady:页面初始化渲染完成

    • onUnload:页面卸载–销毁

    Component

    1. 构建自定义组件的,需要在json组件中声明:"component":true之后才可以在page文件中使用。

    2. 使用组件:在page页面的json里引入

    
        "usingComponents":{
            "wk-header":"/components/header/header"
    
        }
    
    

    生命周期

    • created:创建组件的生命周期

    小程序语法

    渲染数据

    1. 在文档内使用插值的写法{{}}

    2. 在标签上属性内使用也需要{{}}

    3. 修改数据使用this.setData({data:newValue})

    条件渲染

    wx:if,‘wx:else if’,‘wx:else’

    循环渲染

    wx:for="{{data}}"

    默认在for语法内注入了item变量和index变量;

    如果需要修改名字,在元素上使用wx:for-item="别名".

    事件绑定

    bind:eventType='callback'

    移动端没用click事件,对应的是tap事件
    事件又分成俩种
    冒泡事件

    • 父级标签:bindtap='parentChange'
    • 子集标签:bindtap='childrenChange'

    点击子集父级也会执行

    非冒泡事件

    • 父级标签:catchtap='parentChange'
    • 子集标签:catchtap='childrenChange'

    点击子集父级并不会触发

    路由

    例子:

    parent(){
        wx.navigateTo({
              url: '../logs/logs'
            })
      },
    

    wx.switchTab(Object object)

    跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面

    wx.reLaunch(Object object)

    关闭所有页面,打开到应用内的某个页面

    wx.redirectTo(Object object)

    关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面

    属性

    url string 是 需要跳转的 tabBar 页面的路径 (代码包路径)(需在 app.json 的 tabBar 字段定义的页面),路径后不能带参数 **

    success function 否 接口调用成功的回调函数

    fail function 否 接口调用失败的回调函数

    complete function 否 接口调用结束的回调函数(调用成功、失败都会执行

    wx.navigateTo(Object object)

    保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。

    比前三个多出一个属性

    events Object 否 页面间通信接口,用于监听被打开页面发送到当前页面的数据。基础库 2.7.3 开始支持。

    wx.navigateBack(Object object)

    关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈

    属性将url替换成了

    delta number 1 否 返回的页面数,如果 delta 大于现有页面数,则返回到首页

    内置的网络请求

    wx:request({})写法和jq.ajax几乎一样

    更多相关内容
  • 微信小程序常用API

    千次阅读 2022-03-19 17:50:45
    用在视频滑动时, (1)原理: (2)使用上述API创建的对象具备下列方法: (3)在首次加载视频和触底加载视频中,均为新增的视频绑定交叉观察: 9.设置导航栏的加载图标,就是顶上转圈。代表正在加载 10.隐藏导航栏...

    目录

    1.调接口

    2.页面跳转

    3.创建视频前后关系

    4.创建音频的前后关系

    5.设置本地存储

    6.读取本地存储

    7.弹窗相关

    8.用在视频滑动时,

    (1)原理:

    (2)使用上述API创建的对象具备下列方法:

    (3)在首次加载视频和触底加载视频中,均为新增的视频绑定交叉观察:

    9.设置导航栏的加载图标,就是顶上转圈。代表正在加载

    10.隐藏导航栏的加载图标’

    11.用户登录时 获取code: 

    12.检查登录的session_key是否过期:

    13.获取用户信息 :

    14.获取摄像头的上下文关系:

    15.将图片保存至本地

    16.将视频保存至本地

    17.图片的预览功能

    18.从本地选择图片

    19.上传图片

    20.地图,获取当前位置

    21.获取地图的上下文

    22.画布相关canvas

    23.得到设备尺寸

    24. 将画布转换为临时文件:

    25.将临时文件存储至本地相册

    26.获取指定图片的属性值

    27.wx.stopPullDownRefresh() 让下拉的页面恢复原样


    1.调接口

            wx.request

    2.页面跳转

            wx.navigateTo({}),还有wx.redirectTo({}),但是wx.redirectTo不能返回上一个页面了

    3.创建视频前后关系

             wx.createVideoContext('video的id')

    4.创建音频的前后关系

            wx.createInnerAudioContext() || wx.getBackgroundAudioManager()

    5.设置本地存储

            wx.setStorageSync('名',值)

    6.读取本地存储

            wx.getStorageSync('名')

    7.弹窗相关

            wx.showToast({title:'需要提示的文本',icon:'是否带有图标样式'}),如果带有图标,那最多显示七个字,如果想要显示更多的字,就把icon设置成none

        这是一个带有选择项的提示框    

    wx.showModal({

               title:‘模态窗口的标题’,

               content:‘模态窗口的提示文本’,

                success:res=>{}

    })

    8.用在视频滑动时,

            wx.createIntersectionObserver()

    (1)原理:

            使用wx.createIntersectionObserver() API对每一个视频进行观察,当视频与页面中某个元素或在指定的范围内重合,则触发指定的事件。

    (2)使用上述API创建的对象具备下列方法:

         relativeTo():在方法中指定一个元素

         relativeToViewport({top,bottom,left,right}):在方法中指定一个范围

         observe(selector,res=>{

           // 观察selector与一个元素一个范围重合后触发的代码

    })

    (3)在首次加载视频和触底加载视频中,均为新增的视频绑定交叉观察:

         for(let i=0;i<this.data.videoList.length;i++){

            let io=wx.createIntersectionObserver(this);

            io.relativeToViewport({

              top:200,

              bottom:-400

            }).observe(`#v${this.data.videoList[i].id}`,res=>{

              wx.createVideoContext(`v${this.data.videoList[i].id}`).play();

            })

          }

    9.设置导航栏的加载图标,就是顶上转圈。代表正在加载

            wx.showNavigationBarLoading()

    10.隐藏导航栏的加载图标’

             wx.hideNavigationBarLoading()

    11.用户登录时 获取code: 

              wx.login({})用户登录时获取临时凭证也就是code

    12.检查登录的session_key是否过期:

            ' wx.checkSession()

    13.获取用户信息 :

            wx.getUserProfile()  

            规定:wx.getUserProfile() API必须在事件中使用。也就是可以做个单击事件来使用它

    14.获取摄像头的上下文关系:

            一个页面只能有一个上下文关系

            wx.createCameraContext();

    15.将图片保存至本地

             wx.saveImageToPhotoAlbum({

                   filePath:设置保存至本地相册的图片文件路径

            })

    16.将视频保存至本地

            wx.saveVideoToPhotoAlbum({

                     filePath:设置保存至本地乡村的视频文件路径

            })

    17.图片的预览功能

    wx.previewImage({

          urls:提供预览图片的数组,格式:字符串数组,

          current:设置图片预览时的链接地址

    })

    wx.previewMedia({

          source:提供预览图片的数组,格式:对象数组 [{url,type,poster}],

          current:设置预览图片时首先打开的那一张图片的索引值

    })

    18.从本地选择图片

    wx.chooseMedia({

          count:设置每次从本地相册中允许选择的最大图片个数,默认值 9 ,

          mediaType:设置从本地相册中选择的媒体类型,取值:[“image”,“video”,“mix”],

          sourceType:设置选择的数据来源,取值:[“album”,“camera”],

          camera:当sourceType设置为[“camera”],设置摄像头的位置,取值:back、front,

          maxDuration:设置拍摄视频的最大时长,取值 3-60,单位为秒,

          success:res=>{

            console.log(res.tempFiles);      // 返回盛放用户所选图片的数组

            }

    })

    19.上传图片

    wx.uploadFile({

           name:为上传的文件设置一个名称,

           url:设置上传文件的URL地址,由后台提供,

           filePath:设置上传文件的路径及文件名,格式为字符串,

           header:设置上传文件时的附加请求头数据,格式为对象,

           formData:设置上传文件时的附加普通数据,格式为对象,

           success:res=>{}

    })

        (1)该API方法一次只能上传1个文件。

        (2)上传文件的接口必须是POST类型。

        (3)上传文件时name属性时必不可少的。

    20.地图,获取当前位置

    wx.getLocation({})

    wx.startLocationUpdate():手动开启定位更新功能。

             wx.stopLocationUpdate():手动关闭前后台的定位更新功能。

             wx.startLocationUpdateBackground():手动开启后台定位更新功能。

             wx.onLocationChange(res=>{             // 当用户的位置发生变化时触发该事件

               console.log(res.longitude);

               console.log(res.latitude);

    })

    21.获取地图的上下文

    wx.createMapContext(‘map的id’)

    22.画布相关canvas

    wx.createSelectorQuery().select('#myCanvas').fields({

          node:true,

          size:true

        }).exec(this.init.bind(this));

    init(res){

        let canvas=res[0].node; // 获得画布

        let ctx=canvas.getContext('2d'); // 获得画笔

      }

    23.得到设备尺寸

    wx.getSystemInfoSync()

    24. 将画布转换为临时文件:

            wx.canvasToTempFilePath({

                                      x,y,width,height, // 设置画布一个矩形范围进行转换

                                    destWidth,destHeight, // 设置最终临时文件的宽度和高度

                                    canvasId:设置<canvas>的canvas-id属性

                                    canvas:设置canvas实例,

                                    fileType:设置文件类型,取值为 png、jpg

                                    quality:fileType取值为jpg时的图片质量,取值为(0,1]

                                    success:res=>{}

                            })

    25.将临时文件存储至本地相册

            wx.saveImageToPhotosAlbum({

                filePath:

            })

    26.获取指定图片的属性值

            wx.getImageInfo({

                          src: 指定图片的路径或临时路径,

                          success:res=>{}

                   })

    27.wx.stopPullDownRefresh() 让下拉的页面恢复原样

    展开全文
  • 微信小程序常用api

    千次阅读 2020-12-17 00:11:03
    小程序API分为如下3大类 1.事件监听API 特点:以on开头,用来监听某些事件的触发 举例:wx.onWindowResize(function callback)监听窗口尺寸变化的事件 2.同步API 特点1:以Sync结尾的API都是同步API 特点2:同步API...

    小程序API分为如下3大类

    1.事件监听API

    • 特点:以on开头,用来监听某些事件的触发
    • 举例:wx.onWindowResize(function callback)监听窗口尺寸变化的事件

    2.同步API

    • 特点1:以Sync结尾的API都是同步API
    • 特点2:同步API的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出错误
    • 举例:wx.setStorageSync('key','value')向本地存储中写入内容

    3.异步API

    • 特点:类似于jQuery中的$.ajax(options)函数,需要通过success、fail、complete接收调用的结果
    • 举例:wx.request()发起网络数据请求,通过success回调函数接受数据
    小程序中常用的事件
    类型绑定方式事件描述
    tap

    bindtap或bind:tap

    手指触摸后马上离开,类似于HTML中的click事件
    inputbindinput或bind:input文本框的输入事件
    changebindchange或bind:change状态改变时触发

     

    事件对象的属性列表
    属性类型说明
    typeSrting事件类型
    timeStampInteger

    页面打开到触发事件所经过的毫秒数

    targetObject触发事件的组件的一些属性值集合
    currentTargetObject当前组件的一些属性值集合
    detailObject额外的信息
    touchesArray触摸事件,当前停留在屏幕中的触摸点信息的数组
    changedTouchesArray触摸事件,当前变化的触摸点信息的数组

    targetcurrentTarget:target触发该事件的源头组件,而currentTarget则是当前事件所绑定的组件

    点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层的tap事件处理函数,此时,对于外层的组件来说

    • e.target指向的是触发事件的源头组件,因此,e.target是触发冒泡事件的内部组件
    • e.currentTarget指向的是当前正在触发事件的那个组件,因此,e.currentTarget是当前的外层组件

    可以调用this.setData(dataObject)方法,给页面data中的数据重新赋值


    事件传参:小程序中的事件传参比较特殊,不能在绑定事件的同事为事件处理函数传递参数,例如:下面的代码不能正常工作

    <button type="primary" bindtap='btnHandler(123)'>事件传参</button>

    可以为组件提供data-*自定义属性传参,其中*代表的是参数的名字,实例代码如下:

    <button bindtap="btnHandler" data-info="{{2}}">事件传参</button>

    最终:

    • info会被解析为参数的名字
    • 数值2会被解析为参数的值

    在事件处理函数中,通过event.target.dataset.参数名即可获取到具体参数的值,示例代码如下:

    btnHandler(event){
    //dataset 是一个对象 包含了所有通过data-*传递过来的参数项
        console.log(event.target.datastr)
        //通过 dataset 可以访问到具体参数的值
        console.log(event.target.dataset.info)
    }

    通过input事件来响应文本框的输入事件:

    1. 通过bindinput,可以为文本框绑定输入事件:
    <input bindinput="inputHandler"><input>
    1. 在页面的.js文件中定义事件处理函数
    inputHandler(e){
        //e.detail.value 是变化过后 文本框最新的值
        console.log(e.detail.value)
        }

    wx:if

    在小程序中,使用wx:if="{{condtion}}" 来判断是否需要渲染该代码块:

    <view wx:if="{{condtion}}">True</view>

    也可以用wx:elifwx:else来添加else判断:

    <view wx:if="{{type === 1}}">男</view>
    <view wx:elif="{{type === 2}}">女</view>
    <view wx:else>保密</view>
    

    block标签(类似vue中的tempate)不会被渲染出来

    <block wx:if="{{true}}">
        <view>view1</view>
        <view>view2</view>
    </block>

    在小程序中 直接使用hidden="{{condition}}"也能控制元素的显示与隐藏

    <view hidden="{{condtion}}">条件为true隐藏 条件为false显示</view>

    if和hidden的对比

    运行方式不同

    • wx:if 以动态创建和移除元素的方式 控制元素的展示与隐藏
    • hidden 以切换样式的方式(display:none/block),控制元素显示与隐藏

    使用建议

    • 频繁切换时,建议使用hidden
    • 控制条件复杂时,建议使用wx:if 搭配wx:elif wx:else 进行展示与隐藏的切换

    循环 wx:for

    通过wx:for 可以根据指定的数组 循环渲染重复的组件结构 语法示例如下

    <view wx:for="{{array}}">
        索引是: {{index}} 当前项是:{{item}}
    </view>

    收订指定索引和当前项的变量名

    • 使用wx:for-index可以指定当前循环项的索引的变量名
    • 使用wx:for-item 可以指定当前项的变量名
    <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
        索引是: {{idx}} 当前项是:{{itemName}}
    </view>

    wx:key

    类似Vue列表渲染中的:key 提高渲染效率

    //data 数据
    data:{
    userList:[
        {id:1,name: 'zs'},
        {id:2,name: 'ls'},
        {id:3,name: 'ww'},
    ]}
    
    //wxml结构
    <view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>

    导航到tabBar页面

    tabBar页面指的是被配置为tabBar的页面,在使用<navigator>组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性,其中:

    • url表示要跳转的页面的地址,必须以/开头
    • open-type表示跳转方式 必须为switchTab
    <navigator url='/pages/message/message' open-type='switchTab'>导航到消息页面</navigator>

    导航到非tabBar页面

    非tabBar页面指的是没有被配置为tabBar的页面,在使用<navigator>组件跳转到指定的tabBar页面时,需要指定url属性和open-type属性,其中:

    • url表示要跳转的页面的地址,必须以/开头
    • open-type表示跳转方式 必须为navigate
    <navigator url='/pages/message/message' open-type='navigate'>导航到消息页面</navigator>

    非tabBar页面可以不用写open-type属性

     

    调用wx.switchTab(Object object)方法 可以跳转到tabBar页面

    object参数对象属性列表
    属性类型是否必选说明
    urlstring需要跳转的tabBar页面,路径不能带参数
    successfunction接口调用成功的回调函数
    failfunction接口调用失败的回调函数
    completefunction接口调用结束的回调函数(成功,失败都执行)

    导航到非tabBar页面

    调用wx.navigateTo(Object object)方法 可以跳转到非tabBar页面

    object参数对象属性列表
    属性类型是否必选说明
    urlstring需要跳转的非tabBar页面,路径不能带参数
    successfunction接口调用成功的回调函数
    failfunction接口调用失败的回调函数
    completefunction接口调用结束的回调函数(成功,失败都执行)

    后退导航

    如果要后退到上一页面或多级页面 则需要指定open-type属性和delta属性

    • open-type的值必须是navigateBack 表示要进行后退导航
    • delta的值必须是数字 表示要后退的层级
    <navigator open-type='navigateBack' delta='1'>返回上一页</navigator>

    只是后退到上一页面 可以省略delta属性  

    调用wx.navigateBack(object object)方法 可以返回上一页或多级页面


    声明式导航传参

    navigator组件的url属性用来指定将要跳转到的页面的路径 同时,路径后面还可以携带参数

    • 参数路径之间使用 ? 分割
    • 参数键参数值= 相连
    • 不同参数& 分割
    <navigator url='/pages/info/info?name=zs&age=20'>跳转到info页面<navigator>

    编程式导航传参

    调用 wx.navigateTo(object object)方法跳转页面时 也可以携带参数

    //页面结构
    <button bindtap='gotoInfo>跳转到info页面</buoon>
    
    //通过编程式导航 跳转到info页面 并携带参数
    gotoInfo(){
        wx.navigateTo({
            url:'pages/info/info?name=ls&gender=男'
        })
       }

    在onLoad中接收导航参数

    通过声明式导航传参编程式导航传参所携带的参数 可以直接在onLoad事件中直接获取到 

    onLoad:function(options){
        //options就是导航传递过来的参数对象
        console.log(options)
    }    

    停止下拉刷新的效果

    当处理完下拉刷新后 下拉刷新的loading效果会一直显示 不会主动消失 所以需要手动隐藏loading效果 此时调用wx.stopPullDownRefresh()

    启用下拉刷新

    • 全局开启下拉刷新
      • 在 app.json 的 window 节点中 , 将 enablePullDownRefresh 设置为 true
    • 局部开启下拉刷新
      • 在页面的.json 配置文件中 , 将 enablePullDownRefresh 设置为 true

     

    监听用户下拉动作---下拉刷新

    通过onPullDownRefresh: function(){

    }


    通过onReachBottom()函数即可监听当前页面的上拉触底事件


    wx.setNavigationBarTitle(object object) 动态设置当前页面的标题

    只能在onReady() 页面初次渲染完成时   调用


    wx.showToast(object object)  提示框


    获取当前设备信息

    wx.getSystemInfoSync()

    展开全文
  • 微信小程序如何封装api接口 首先创建个http文件夹(可自定义名字) 一:创建个env.js文件用来设置公共访问的url,即环境地址 module.exports = { //开发环境 dev:{baseUrl:http://localhost:3000}, //测试环境 ...
  • 微信小程序常用api 封装 /** * 封封微信的的request */ function request(url, data = {}, method = "POST", header = "application/x-www-form-urlencoded") { wx.showLoading({ title: '加载中...', }); ...

    微信小程序常用api 封装

    /**
     * 封封微信的的request
     */
    function request(url, data = {}, method = "POST", header = "application/x-www-form-urlencoded") {
        wx.showLoading({
            title: '加载中...',
        });
        return new Promise(function (resolve, reject) {
            wx.request({
                url: url,
                data: data,
                method: method,
                header: {
                    'Content-Type': header,
                    'X-Nideshop-Token': wx.getStorageSync('token')
                },
                success: function (res) {
                    wx.hideLoading();
                    if (res.statusCode == 200) {
                        if (res.data.errno == 401) {
                            wx.navigateTo({
                                url: '/pages/login/login',
                            })
                        } else {
                            resolve(res.data);
                        }
                    } else {
                        reject(res.errMsg);
                    }
    
                },
                fail: function (err) {
                    reject(err)
                }
            })
        });
    }
    
    /**
     * 检查微信会话是否过期
     */
    function checkSession() {
        return new Promise(function (resolve, reject) {
            wx.checkSession({
                success: function () {
                    resolve(true);
                },
                fail: function () {
                    reject(false);
                }
            })
        });
    }
    
    /**
     * 调用微信登录
     */
    function login() {
        return new Promise(function (resolve, reject) {
            wx.login({
                success: function (res) {
                    if (res.code) {
                        resolve(res);
                    } else {
                        reject(res);
                    }
                },
                fail: function (err) {
                    reject(err);
                }
            });
        });
    }
    
    function showErrorToast(msg) {
        wx.showToast({
            title: msg,
            image: '/static/images/icon_error.png'
        })
    }
    
    function showSuccessToast(msg) {
        wx.showToast({
            title: msg,
        })
    }
    
    function formatTime(date) {
        var year = date.getFullYear()
        var month = date.getMonth() + 1
        var day = date.getDate()
    
        var hour = date.getHours()
        var minute = date.getMinutes()
        var second = date.getSeconds()
    
    
        return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
    }
    
    function formatNumber(n) {
        n = n.toString()
        return n[1] ? n : '0' + n
    }
    
    展开全文
  • uniapp与微信小程序常用api

    千次阅读 2020-05-29 16:53:25
    uniapp与微信小程序常用api 1. 判断用户是否授权 uniapp uni.getSetting(OBJECT)点击 小程序 wx.getSetting(Object object)点击 2. 跳出授权窗口 uniapp uni.authorize(OBJECT)点击 小程序 wx.authorize(Object ...
  • 关于小程序 张小龙定义小程序: 1.不需要下载安装即可使用; 2.用完即走,不用关心是否安装太多应用; 3.应用无处不在,随时可用。 特点: 1.适合业务逻辑简单的应用; 2,.适合低频应用; 3.适合性能要求不...
  • 微信小程序 常用API

    千次阅读 2019-02-26 11:55:44
    API: wx.getImageInfo():获取图片路径; wx.saveImageToPhotosAlbum() 保存图片 关键点:通过模态框去引导用户进行授权操作: wx.showModal(),wx.openSetting() // 保存图片 saveImg() { let current = this.data....
  • 微信小程序封装API接口 1. 首先在微信小程序管理后台中注册域名 2. 新建文件夹http,api是封装的接口函数,env是设置公共访问的url,http是二次封装wx.request(); 3. env.js //设置公共访问的url,即环境变量 ...
  • 小程序开发API介绍;小程序开发API介绍- 1.什么是API;小程序开发API介绍- 1.什么是API;小程序开发API介绍;小程序开发API介绍- 2.小程序中如何使用API;小程序开发API介绍- 2.小程序中如何使用API;小程序开发API介绍;...
  • 花了几天时间体验了微信小程序,借助知乎专栏的API 码出一个项目,也深有体会 拿出来跟大家分享下 页面 查看专栏首页 查看专栏文章列表 查看文章详情 编写文章 功能 各种基本组件使用 微信上拉加载更多 本地预览图片...
  • 内容待写。。。 ≧◔◡◔≦ 滑到底啦~ // 1.0 小程序接收传递过来的参数 onLoad ...微信小程序常用api总结------...微信小程序常用api总结------推荐文章2 微信小程序页面自调用组件内的事件-------推荐文章3
  • 小程序中页面栈最多十层 参数 属性 类型 默认值 必填 说明 url string 是 需要跳转的应用内非 tabBar 的页面的路径, 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔;如...
  • 工具类封装: // utils.js // 显示消息提示框 export function Toast(title,type,time,isshow){ wx.showToast({ title: title, icon: type, duration: time, ... 各位伙伴,再接再励,希望这篇文章对大家有点收获…
  • 微信小程序 location API 接口: 现在微信小程序火了 ,利用假期时间学习了下,微信小程序的基础知识,嘿嘿! 以下是记录学习微信小程序 location API接口,并且写了一个小实例来记录,如有错误之处还请指正。 微信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,240
精华内容 10,896
关键字:

微信小程序常用api