微信小程序开发的学习

Updated on with 0 views and 0 comments

微信小程序开发的学习

微信小程序开发

前言

是什么

image-20210901165214528

与APP 的区别

一、下载

App 从应用商店(如 App Store)里下载;小程序 通过微信(扫描二维码、搜索)直接获得;

二、安装

App 安装在手机内存中,就像自己买了辆车放在车库里随时开;小程序不需要安装,就像免费用嘀嘀打车,召之即来用完拜拜;

三、占用空间

App 会一直存在手机中占用空间,太多的 App 可能会导致内存不足;小程序因为不需要安装,占用内存空间忽略不计;

四、广告推送

App 会隔三差五给用户推送广告,太多未读提示会逼死强迫症;小程序不允许主动给用户发送广告,仅能回复模版消息;

五、机会

App市场已经饱和,几乎所有的领域都已经被覆盖;小程序是一片蓝海,在新的使用场景下有很多瓜分蛋糕的好机会;

六、开发

App 需要适配市场上很多款的主流手机,开发成本大;小程序 一次开发就可以自动适配所有手机;

七、发布

App 需要向十几个应用商店提交审核,且每个应用商店要求的资料都不一样,非常繁琐;小程序 只需要提交到微信公众平台审核 ;

八、用户群

App 面向所有智能手机用户,截止2015年约19亿台;小程序面向所有微信用户,约8亿人 ;

九、开发周期

一款完善的双平台 App 平均的开发周期约3个月;小程序 平均开发周期约2周,仅为App的六分之一;

十、功能

App 可以实现完整功能 ;小程序 仅限微信提供的接口功能;

什么 APP 适合做 小程序

image-20210901170153475

a、使用频率高而且还很重要不适合用微信小程序,应该用原生的app开发
b、使用频率低而且很重要应该用微信小程序开发
c、使用频率高但是不重要应该用小程序为入口导向原生app
d、使用频率不高也不重要优选小程序开发

技术点

  • 并不是HTML5/CSS3技术实现
  • 抛弃了臃肿的WebView
  • 采用了JavaScriptCore动态解析
  • 大量借鉴React.js + ReactNative.js思想

API

https://developers.weixin.qq.com/miniprogram/dev/api/

image-20210901170605649

开发准备

注册微信小程序开发

https://mp.weixin.qq.com/cgi-bin/wx

下载微信开发者工具

https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

项目结构

image-20210901170834067

image-20210901170859884

基本组件的使用

基本组件

app.json

tabBar 导航一般 二至四个

{
  "pages":[
    "pages/index/index",
    "pages/demo/demo",
    "pages/test/test"
  ],
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/demo/demo",
        "text": "demo页"
      },
      {
        "pagePath": "pages/test/test",
        "text": "测试页"
      }
    ]
  }
}

index.wxss

组件样式

{{}} 引入数据

点击事件 bindtap

<!--pages/index/index.wxml-->
<text>pages/index/index.wxml</text>
<button type="default" bindtap="btnClick">白色按钮</button>
<button type="primary">绿色按钮</button>
<button type="warn">红色按钮</button>
<text>{{name}}</text>

index.js

this 代表当前页面Page

/**
   * 页面的初始数据
   */
  data: {
    name: "index 中 name 的内容"
  },

  btnClick: function() {
    /**
     * 修改 data 数据 name
     */
    this.setData({name: "按钮点击修改 name 的内容"})
  },

条件渲染和循环渲染

条件渲染

在框架中,使用 wx:if="" 来判断是否需要渲染该代码块

<button type="warn" wx:if="{{flag}}">红色按钮</button>

列表渲染

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。

默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

<view wx:for="{{arr}}">
  序号{{index}}:{{item}}
</view>
data: {
  name: "index 中 name 的内容",
  flag: false,  
  arr: ["甲","乙","炳","丁","戊"]  
}

shift 删除第一个 unshift 新增一个

pop 删除最后一个 push 新增最后一个

返回值都是当前新增或者删除的元素

*JavaScript数组可以表现的像栈(LIFO)和队列(FIFO)一样操作。这也是JavaScript数组强大的可操作性的体现。*

shiftEle: function() {
    // 从第一个元素开始删除
    var arr = this.data.arr;
    //arr.shift(); // 从第一个开始删除
    //arr.pop(); // 从最后一个开始删除
    arr.unshift(arr.pop()); // 元素向下走
    this.setData({arr: arr});
}

模板的应用

我们的小程序中,可能很多页面都是使用同一个顶部与同一个底部,这一部分的代码就可以被很多页面所共用,这种情况下,我们就可以把这部分内容单独提取成一个模板,每个页面都将其加载进来即可。
在Pages目录下新建一个目录名为template,在其下新建一个wxml文件,我们在这个文件里写我们的模板。模板的使用有两种方式

wxml

<template name="footer1">
  这个是底部的数据1
</template>
<template name="footer2">
  这个是底部的数据2
</template>
<text>这个是头内容</text>

通过include引入 相当于页面内容全部 包含

<include src="../template/header.wxml"/>

通过import引入 先引入 在选择使用

<import src="../template/footer.wxml"/>
<template is="footer2"/>

事件和事件冒泡的避免

事件是视图层到逻辑层的通讯方式。
事件可以将用户的行为反馈到逻辑层进行处理。
事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
事件对象可以携带额外信息,如id, dataset, touches。

点击、长按、触摸事件

  • bindtap、bindlongtap
  • bind:touchstart:开始触摸
  • bind:touchmove:手指触摸后移动
  • bind:touchcansce:取消触摸
  • bind:bind:touchend:触摸结束

点击、长按、触摸都属于冒泡事件 会触发冒泡、子标签传递父标签

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡

navigator 组件 url 实现跳转:只能跳转除了 tabBar 的页面

跳转组件和页面标题

跳转组件

<!-- 组件完成跳转-->>
<navigator url="../log/log">跳转 log</navigator>

页面标题 修改页面 json 文件

"navigationBarTitleText": "日志页面"

新增图片 添加目录 images

全局 app.json 配置

"iconPath": "images/fenlei.png",
"selectedIconPath": "images/fenlei-select.png"

携带参数的跳转

JS 方法实现跳转

navigator 的 url 跳转

通过 onload 的 options 接收带参数的跳转

/**
 * 生命周期函数--监听页面加载
 */
onLoad: function (options) {
  
},

button 的 bindtap 绑定方法跳转

wx.navigateTo 可以返回上一层

wx.redirectTo 只能返回首页

wx.switchTab:只能跳转TabBar 页面

toLog1: function() {
  wx.navigateTo({
    url: '../log/log?name=法外狂徒&age=81',
  })
},
toLog2: function() {
  wx.redirectTo({
    url: '../log/log?name=法外狂徒&age=81',
  })
},
toTabBar: function() {
  wx.switchTab({
    url: '/pages/demo/demo',
  })
},  

全局变量的应用

全局变量、事件

app.js

// app.js
App({
  globalData: {
    id: 24,
    appName: "小程序"
  }
})

index.js

/**
 * 生命周期函数--监听页面加载
 */
onLoad: function (options) {
  // 获取App对象
  var app = getApp();
  var appId =app.globalData.appId;
  // 修改名字
  app.globalData.appName = "新的名字"
  var appName = app.globalData.appName;
  console.log("全局参数:" + appId + "--" + appName)
},

事件携带参数

data- 自定义的名字

<button bindtap="clickEvent" data-school="BliBli">传参的事件</button>

ev 为自定义 固定获取写法

/**
 * 
 * @param {*} ev  事件对象
 * ev.currentTarget   事件源 
 */
clickEvent: function(ev) {
  var school = ev.currentTarget.dataset.school;
  // 发送 school
  console.log("获取的事件源携带的参数:"+school)
},

发起网络请求

wx.request 发送请求url、header、success

<button bindtap="getQuestions">发送网络请求</button>
getQuestions: function() {
  wx.request({
    url: 'http://localhost:9999/api/question/question/list',
    method: 'POST',
    success: function(data) {
      console.log(data)
    }
  })
},

image-20210901225656362

详情 本地设置 不校验合法域名 CORS 跨域设置

image-20210901225730917


标题:微信小程序开发的学习
作者:HB2Ocean
地址:http://future-hb.top:8080/articles/2021/09/05/1630827553329.html