零基础入门微信小程序(1)

本文详细介绍微信小程序的基础知识,包括环境搭建、配置文件设置、基础语法使用及常用组件介绍等内容。

一、简单认识

微信小程序,简称⼩程序,英⽂名 Mini Program ,是⼀种不需要下载安装即可使⽤的应⽤,它实现了应⽤“触⼿可及”的梦想,用户扫⼀扫或搜⼀下即可打开应⽤

优势

1.微信有海量用户,而且粘性很高,在微信⾥开发产品更容易触达用户;
2.推广App或公众号的成本太高。
3.开发适配成本低。
4.容易小规模试错,然后快速迭代。
5.跨平台。

介绍网址:https://developers.weixin.qq.com/miniprogram/introduction/

二、环境准备

1.注册

注册网址:https://mp.weixin.qq.com/wxopen/waregister?action=step1
在这里插入图片描述

2.获取AppID

由于后期调⽤微信⼩程序的接⼝等功能,需要索取开发者的⼩程序中的 APPID ,所以在注册成功后,可登录,然后获取APPID。

在这里插入图片描述

3.开发工具下载

在这里插入图片描述

下载之后直接安装就完事,可以选择安装目录

以下为页面布局

在这里插入图片描述

4.小程序目录结构

小程序框架的⽬标是通过尽可能简单、高效的⽅式让开发者可以在微信中开发具有原⽣APP体验的服务。
小程序框架提供了自己的视图层描述语⾔ WXMLWXSS以及JavaScript ,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

小程序文件结构与传统Web对比

结构传统Web微信小程序
结构HTMLWXML
样式CSSWXSS
逻辑JavaScriptJavaScript
配置JSON

基本目录结构
在这里插入图片描述

三、小程序配置文件

1.全局配置 app.json

小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。

{
  "pages":[
    "pages/demo16/demo16",
    "pages/demo15/demo15"
  ],
  "window":{
    "backgroundTextStyle":"dark",
    "navigationBarBackgroundColor": "#0094ff",
    "navigationBarTitleText": "我的应用",
    "navigationBarTextStyle":"white",
    "enablePullDownRefresh":true,
    "backgroundColor": "#33ccff"
  ,
  "tabBar": {
    "list": [{
      "pagePath": "pages/demo16/demo16",
      "text": "首页",
      "iconPath": "icon/_home.png",
      "selectedIconPath": "icon/home.png"
    },
   "sitemapLocation": "sitemap.json"
}          

2.页面配置 page

用于指定小程序由哪些页面组成,每一项都对应一个页面的 路径(含文件名) 信息。文件名不需要写文件后缀,框架会自动去寻找对应位置的 .json, .js, .wxml, .wxss 四个文件进行处理。

小程序中新增/减少页面,都需要对 pages 数组进行修改。

如开发目录为:

├── app.js
├── app.json
├── app.wxss
├── pages
│   │── index
│   │   ├── index.wxml
│   │   ├── index.js
│   │   ├── index.json
│   │   └── index.wxss
│   └── logs
│       ├── logs.wxml
│       └── logs.js
└── utils

则需要在 app.json 中写

{
  "pages": ["pages/index/index", 
            "pages/logs/logs"]
}

3.window

用于设置小程序的状态栏、导航条、标题、窗口背景色。

属性类型默认值描述
navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如 #000000
navigationBarTextStylestringwhite导航栏标题颜色,仅支持 black / white
backgroundTextStylestringdark下拉 loading 的样式,仅支持 dark / light
navigationBarTitleTextstring导航栏标题文字内容
backgroundColorHexColor#ffffff窗口的背景色
enablePullDownRefreshbooleanfalse是否开启全局的下拉刷新。
onReachBottomDistancenumber50页面上拉触底事件触发时距页面底部距离,单位为 px。
  "window":{
    "backgroundTextStyle":"dark",
    "navigationBarBackgroundColor": "#0094ff",
    "navigationBarTitleText": "我的应用",
    "navigationBarTextStyle":"white",
    "enablePullDownRefresh":true,
    "backgroundColor": "#33ccff"
  }

4.Tabbar

属性列表

属性类型默认值必填说明
ext-classstring添加在组件内部结构的class,可用于修改组件内部的样式
listarrayTabbar的项的数组,按照规范,至少要有2个Tabbar项
currentnumber0当前选中的Tabbar项的下标
bindchangeeventhandlerTabbar项发生改成的时候触发此事件,detail为{index, item},index是Tabbar下标,item是对应的Tabbar项的配置

list属性是对象数组,每一项表示一个Tabbar项,其字段含义为

字段名类型默认值必填说明
textstringTabbar项的标题
iconPathstringTabbar项的icon图片路径,建议使用绝对路径,相对路径要相对于组件所在目录的。
selectedIconPathstringTabbar项选中时的icon,建议使用绝对路径,相对路径要相对于组件所在目录的。
badgestring是否显示Tabbar的右上角的Badge
  "tabBar": {
    "list": [{
      "pagePath": "pages/demo16/demo16",
      "text": "首页",
      "iconPath": "icon/_home.png",
      "selectedIconPath": "icon/home.png"
    },
    {
      "pagePath": "pages/img/img",
      "text": "图片",
      "iconPath": "icon/_img.png",
      "selectedIconPath": "icon/img.png"
    },
    {
      "pagePath": "pages/mine/mine",
      "text": "我的",
      "iconPath": "icon/_my.png",
      "selectedIconPath": "icon/my.png"
    },
    {
      "pagePath": "pages/search/search",
      "text": "搜索",
      "iconPath": "icon/_search.png",
      "selectedIconPath": "icon/search.png"
    }] ,
    "color": "#ff9400" ,
    "backgroundColor": "#fff"
  }

在这里插入图片描述

四、基础语法

1.数据绑定

数据包括 字符串、数字、布尔类型、对象,列表等

1.text 相当于以前web中的span标签 行内元素 不会换行

2.view 相当于以前web中的div标签 块级元素 会换行

3.block:占位符的标签,写代码的时候 可以看到标签的存在页面渲染的时候小程序会把它移除掉

【JavaScript-数据】

 /**
   * 页面的初始数据
   */
  data: {
    msg:"hello mina",
    num:1000,
    truth:true,
    person:{
      name:"suc",
      age:18,
      habit:"AI"
    },
    isChecked:true,
    list:[
      {
        id:0,
        name:'美猴王',
        nick:"mhw"
      },
      {
        id:1,
        name:"齐天大圣",
        nick:"sss"
      },
    {
      id:2,
      name:"孙悟空",
      nick:"ssa"
    }
    
    ]
  }   

【WXML】

<!-- 1.字符串 -->
<view> {{msg}} </view>
  <!-- 2.数字类型 -->
<view>{{num}}</view>
<!-- 3.bool类型 -->
<view>love:{{truth}}</view>
<!-- 4.Object类型 -->
<view>{{person.name}}</view>
<view>{{person.age}}</view>
<view>{{person.habit}}</view>
<!-- 5.自定义属性 -->
<view data-num="{{num}}">自定义属性</view>
<!-- 6.使用bool类充当属性 -->
<view>
  <checkbox checked="{{isChecked}}">123</checkbox>
</view>
<!-- 7.简单运算 -->
<view>{{1+1}}</view>
<view>{{'1'+'1'}}</view>
<view>{{ 11%2==0 ? '偶数' : '奇数'}}</view>

2.列表

1.wx:for = “{{数组或者对象}}”wx:for-item=“循环项的名称” wx:for-index = “循环项的索引”
2.wx:key = “唯一的值” 用来提高列表的渲染性能

  1. wx:key 绑定一个普通字符串的时候,那么这个字符串的名称肯定是循环数组中的对象的唯一属性

  2. wx:key ="*this" 就表示你的数组是一个普通的数组 *this表示是 循环项

    1. 当出现 数组的循环嵌套的时候,尤其要注意,以下绑定的名称不要重名
      wx:for-item=“item” wx:for-index=“index”

    2. 默认情况下我们不写wx:for-item=“item” wx:for-index=“index”
      小程序也会把循环项的名称和索引的名称 item 和 index, 只有一层循环的话(wx:for-item=“item” wx:for-index=“index”)可以省略

<view>
  <view
  wx:for="{{list}}"
  wx:for-item="item"
  wx:for-index="index"
  wx:key="id"
  >
    索引:{{index}}
    --
    值:{{item.name}}
  </view>
</view>

3.对象循环

1.wx:for="{{对象}}" wx:for-item=“对象的值” wx:for-index=“对象的属性”
2.循环对象的时候最好把item和index的名称都改一下
wx:for-item=“value” wx:for-index=“key”

<view>
  <view>对象循环</view>
  <view 
  wx:for="{{person}}" 
  wx:for-item="value" 
  wx:for-index="key"
  wx:key="age">
    属性:{{key}}
    --
    值:{{value}}

  </view>
</view>


<!--  block 

-->
<view>
  <block
  wx:for="{{list}}"
  wx:for-item="item"
  wx:for-index="index"
  wx:key="id"
  class="mylist"
  >
    索引:{{index}}
    --
    值:{{item.name}}
  </block>
</view>

4.条件渲染

<!-- 11.条件渲染
  1.wx:if="{{true/false}}"
  2.wx:if
    wx:elif
    wx:else
  3.hidden
    1.标签直接加属性 hidden
    2.hidden="{{true}}"
  4.什么场景下使用:
    1.当标签不频繁切换时:优先使用 wx:if
      直接把标签从页面结构中移除
    2.当标签频繁切换的时候,优先使用hidden
      通过添加样式的方式来切换显示
      注意:hidden属性不要和样式display一起使用
-->

<view>
  <view>条件渲染</view>
  <view wx:if="{{true}}">显示</view>
  <view wx:if="{{false}}">隐藏</view>

  <view>-----------</view>
  <view hidden>hidden1</view>
  <view hidden="{{false}}">hidden2</view>

  <view>-----------</view>
  <view wx:if="{{false}}">wx:if</view>
  <view hidden>hidden</view>

</view>

在这里插入图片描述

5、事件绑定

小程序中的事件绑定,通过bind关键字来实现,如bindtap,bindinput,bindchang

<!-- 
1.需要给input事件标签绑定 input事件
  绑定关键字 bindinput
2.如何获取 输入框的值
  通过事件源来获取
  e.detail.value
3.把输入框的值赋值到data当中
  写法:
    this.setData({
      num:e.detail.value
    })
4.需要加入一个点击事件
    1.bindtap
    2.无法在小程序当中 事件中直接传参
    3.通过自定义属性的方式传递参数
    4.事件源中获取 自定义属性


 -->

<input type="text" bindinput="handleInput" />
<button bindtap="handletap" data-operation="{{1}}">+</button>
<button bindtap="handletap" data-operation="{{-1}}">-</button>
<view>{{num}}</view>
Page({
  data: {
    num:0
  },
handleInput(e){
	console.log(e)
    this.setData({ 
      num:e.detail.value})
  },
handletap(e){
  // 1.获取自定义属性 operation
  //console.log(e)
  const operation =e.currentTarget.dataset.operation;
  this.setData({
    num:this.data.num + operation
  })

}
})

在这里插入图片描述

六、常用组件

1.view

代替原来的div

2.text

属性类型默认值必填说明
selectablebooleanfalse文本是否可选
user-selectbooleanfalse文本是否可选,该属性会使文本节点显示为 inline-block
spacestring显示连续空格
decodebooleanfalse是否解码

space 的合法值

说明
ensp中文字符空格一半大小
emsp中文字符空格大小
nbsp根据字体设置的空格大小
tip: decode可以解析的有 &nbsp; &lt; &gt; &amp; &apos; &ensp; &emsp;

3.image

属性类型默认值必填说明
srcstring图片资源地址
modestringscaleToFill图片裁剪、缩放的模式
lazy-loadbooleanfalse图片懒加载,在即将进入一定范围(上下三屏)时才开始加载

mode 的合法值

说明
scaleToFill缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
aspectFit缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
aspectFill缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。
widthFix缩放模式,宽度不变,高度自动变化,保持原图宽高比不变
heightFix缩放模式,高度不变,宽度自动变化,保持原图宽高比不变
top裁剪模式,不缩放图片,只显示图片的顶部区域
bottom裁剪模式,不缩放图片,只显示图片的底部区域
center裁剪模式,不缩放图片,只显示图片的中间区域
left裁剪模式,不缩放图片,只显示图片的左边区域
right裁剪模式,不缩放图片,只显示图片的右边区域
top left裁剪模式,不缩放图片,只显示图片的左上边区域
top right裁剪模式,不缩放图片,只显示图片的右上边区域
bottom left裁剪模式,不缩放图片,只显示图片的左下边区域
bottom right裁剪模式,不缩放图片,只显示图片的右下边区域
<!-- 
  image:图片加载
  1. src 指定要加载的图片路径
  图片的默认宽度和高度 320*320 原图大小是320*240 原图大小是200*100
  2.model 决定图片内容,如何和图片标签宽高做适配
    1.scaleToFill 默认值 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素
    2.aspectFit 保持宽高比 确保图片长边显示出来
    3.widthFix 宽度确定,高度会自己调整
 -->
 <image class="" src="https://ftp.bmp.ovh/imgs/2020/10/f315c6f1f74cb9c5.jpg" mode="widthFix" lazy-load="false" binderror="" bindload="" />

4.swiper

微信内置轮播图组件,默认宽度100%,高度150px

属性类型默认值必填说明
indicator-dotsbooleanfalse是否显示面板指示点
indicator-colorcolorrgba(0, 0, 0, .3)指示点颜色
indicator-active-colorcolor#000000当前选中的指示点颜色
autoplaybooleanfalse是否自动切换
currentnumber0当前所在滑块的 index
intervalnumber5000自动切换时间间隔
durationnumber500滑动动画时长
circularbooleanfalse是否采用衔接滑动
<!-- 
   1. 轮播图的外层容器 swiper
   2.每一个轮播项 swiper-item
   3.swiper标签 存在默认样式 
    1.width 100%
    2.height 150px
    3.swiper 高度,无法实现内容撑开
  4.先找出来 原图的宽度和高度 等比例给swiper定高度和宽度
  5.autoplay 自动轮播
  6.interval 修改轮播时间 circular 衔接轮播 indicator-dots 显示指示器 indicator-color指示器未选中颜色
 -->
 <swiper autoplay interval="2000" circular indicator-dots indicator-color="#0094ff" indicator-active-color="#ff0094">
   <swiper-item><image mode="widthFix" src="https://aecpm.alicdn.com/simba/img/TB15tIjGVXXXXcoapXXSutbFXXX.jpg" /> </swiper-item>
   <swiper-item><image mode="widthFix" src="https://aecpm.alicdn.com/simba/img/TB1CWf9KpXXXXbuXpXXSutbFXXX.jpg_q50.jpg"/></swiper-item>
   <swiper-item><image mode="widthFix" src="https://img.alicdn.com/imgextra/i3/27/O1CN019CAYMI1C4PK6mp9qX_!!27-0-luban.jpg" /> </swiper-item>
  </swiper>

5.navigator

导航组件,类似于超链接

属性类型默认值必填说明
targetstringself在哪个目标上发生跳转,默认当前小程序可选值self/miniProgram
urlstring当前小程序内的跳转链接
open-typestringnavigate跳转方式

open-type 有效值

说明
navigate保留当前页面,跳转到应用内的某个页面
redirect关闭当前页面,跳转到应用内的某个页面
reLaunch关闭所有页面,打开到应用内的某个页面
switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
<!-- 
  导航组件:navigator
    1.块级元素:默认会换行 可以直接加宽度和高度
    2.url 要跳转的页面 绝对路径 相对路径
    3.target 要跳转到当前的小程序还是其他的小程序页面
      self 默认值 小程序自己的页面
      miniProgram 其他的小程序页面
    4.open-type 跳转方式
      1.navigate 默认值 保留当前页面,跳转到应用内某个页面,但不能跳到tabbar页面
      2.redirect 关闭当前页面,跳转到应用内的某个页面,但是不允许跳转到tabbar页面
      3.switchTab 跳转到taBar页面,并关闭其他所有非tabBar页面
      4.reLaunch 关闭所有页面,打开应用内的某个页面
 -->
 <navigator url="/pages/demo10/demo10">轮播图页面</navigator>
 <navigator open-type="switchTab" url="/pages/index/index">跳转到 tabbar页面</navigator>
 <navigator open-type="redirect" url="/pages/demo10/demo10">轮播图页面</navigator>
 <navigator url="/pages/demo10/demo10">轮播图页面</navigator>
 <navigator open-type="reLaunch" url="/pages/index/index">reLaunch随便跳</navigator>

6.button

属性类型默认值必填说明
sizestringdefault按钮的大小
typestringdefault按钮的样式类型
plainbooleanfalse按钮是否镂空,背景色透明
disabledbooleanfalse是否禁用
loadingbooleanfalse名称前是否带 loading 图标
form-typestring用于 form组件,点击分别会触发 form 组件的 submit/reset 事件
open-typestring微信开放能力

size 的合法值

说明
default默认大小
mini小尺寸

type 的合法值

说明
primary绿色
default白色
warn红色

form-type 的合法值

说明
submit提交表单
reset重置表单

open-type 的合法值

说明
contact打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,具体说明
share触发用户转发,使用前建议先阅读使用指引
getPhoneNumber获取用户手机号,可以从bindgetphonenumber回调中获取到用户信息,具体说明
getUserInfo获取用户信息,可以从bindgetuserinfo回调中获取到用户信息
launchApp打开APP,可以通过app-parameter属性设定向APP传的参数具体说明
openSetting打开授权设置页
feedback打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容
<!-- 
  button 标签
  1.外观的属性
    1.size 控制按钮的大小
      1.default 默认大小
      2.mini小尺寸
    2.type 用来控制按钮的颜色
      1.default 灰色
      2.primary 绿色
      3.warn 红色
    3.plain 按钮是否镂空,背景色透明
 -->
 <button>默认按钮</button>
 <button size="mini"> mini 默认按钮</button>
 <button loading type="primary">primary按钮</button>
 <button type="warn">warn按钮</button>
 <button type="warn" plain>plain按钮</button>

 <!-- 
  contact 	打开客服会话,如果用户在会话中点击消息卡片后返回小程序,可以从 bindcontact 回调中获得具体信息,
  share 	触发用户转发,使用前建议先阅读使用指引 	
  getPhoneNumber 	获取用户手机号,可以从bindgetphonenumber回调中获取到用户信息, 
    1.绑定一个事件,bindgetphonenumber
    2.在事件中回调函数 通过参数获取信息
    3.获取到的信息 已经加密过
      需要用户自己到小程序后台服务器,在后台解析再返回
  getUserInfo 	获取用户信息,可以从bindgetuserinfo回调中获取到用户信息 	
  launchApp 	打开APP,可以通过app-parameter属性设定向APP传的参数具体说明 	
  openSetting 	打开授权设置页 	
  feedback 	打开“意见反馈”页面,用户可提交反馈内容并上传日志,开发者可以登录小程序管理后台后进入左侧菜单“客服反馈”页面获取到反馈内容

  -->
  <button open-type="contact">contact</button>
  <button open-type="share">share</button>
  <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">getPhoneNumber</button>
  <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">getUserInfo</button>
  <button open-type="launchApp">launchApp</button>
  <button open-type="openSetting">openSetting</button>
  <button open-type="feedback">feedback</button>
// pages/demo13/demo13.js
Page({
  //获取手机号码
  getPhoneNumber(e){
    console.log(e);
  },
  //获取用户信息
  getUserInfo(e){
    console.log(e)
  }
})

7.icon

图标。组件属性的长度单位默认为px,2.4.0起支持传入单位(rpx/px)。

属性类型默认值必填说明
typestringicon的类型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear
sizenumber/string23icon的大小
colorstringicon的颜色,同css的color

在这里插入图片描述

 <icon class="" type="success" size="23" color=""></icon>

8.radio

属性类型默认值必填说明
valuestringradio 标识。当该radio 选中时,radio-group的 change 事件会携带radio的value
checkedbooleanfalse当前是否选中
disabledbooleanfalse是否禁用
colorstring#09BB07radio的颜色,同css的color

9.checkbox

属性类型默认值必填说明
valuestringcheckbox标识,选中时触发checkbox-group的 change 事件,并携带 checkbox 的 value
disabledbooleanfalse是否禁用
checkedbooleanfalse当前是否选中,可用来设置默认选中
colorstring#09BB07checkbox的颜色,同css的color
<!-- 
    radio 单选框
    1.radio 标签 必须要和父元素 radio-group来使用
    2.value选中的单选框的值
    3.需要在radio-group绑定的change事件
    4.需要在页面中显示选中的值
 -->
 <checkbox-group bindchange="handleChange">
    <checkbox  value="male"></checkbox>
    <checkbox  value="female"></checkbox>
</checkbox-group>

<view>
    您选中的是:{{gender}}
</view>
Page({
  data: {
    gender:""
    
  },
  handleChange(e){
    //1.获取单选框中的值
    console.log(e)
    let gender =e.detail.value;
    //2.赋值
    this.setData({
      gender
    })
  }
})

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值