微信小程序快速入门01(含案例)

news2024/11/18 15:30:13

文章目录

  • 前言
  • 一、组件
    • 1.常用视图容器类组件
      • view
      • scroll-view
      • swiper、swiper-item
    • 2.text、rich-text
    • 3.其他常用组件
      • button
      • image
      • navigator
  • 二、小程序API
  • 三、数据绑定
    • 1.定义页面数据
    • 2.绑定数据
  • 四、事件绑定
    • 1.什么是事件
    • 2.小程序中常用的事件
    • 3.事件对象 的属性列表
      • target和currentTarget区别
    • 4.bindtap的语法格式
    • 5.在事件处理函数中为data中数据赋值
    • 6.事件传参
    • 7.bindinput的语法格式
    • 8.实例:
  • 五、条件渲染和列表渲染
    • 1.wx:if
      • 结合<block>使用wx:if
      • hidden
      • wx:if与hidden的对比
      • 实例
    • 2.wx:for
      • 手动指定索引和当前项的变量名*
      • wx:key的使用
      • 实例
  • 六、WXSS模板样式
    • WXSS和CSS的关系
      • rpx尺寸单位
      • rpx与px之间的单位换算*
  • 七、样式
    • 1.样式导入
    • 2.全局样式
    • 3.局部样式
  • 八、全局配置
    • 1.常用全局配置
    • 2.小程序窗口组成部分
    • 3.app.json内的window节点
      • 常用配置项
      • 下拉刷新
      • 上拉触底处理
    • 4.tabBar
      • tabBar的六个组成
      • tabBar节点的配置项
      • 每个tab项的配置选项
      • 实例
  • 九、页面配置
    • 1.页面配置文件的作用
    • 2.页面配置和全局配置的关系
    • 3.页面配置中的常用配置项
  • 九、网络请求
    • 1.小程序中网络数据请求的限制
    • 2.配置request合法域名
    • 3.发起GET请求
    • 4.发起POST请求
    • 5.在页面刚加载时请求数据
    • 6.跳过request合法域名校验
    • 7.关于跨域和Ajax的说明
  • 十、案例
  • 总结


前言

一篇学习常用组件、数据绑定、事件绑定、条件渲染、列表渲染、样式、全局配置(window、tabBar)、数据请求(GET、POST)、API。(包含黑马程序员本地生活首页实现案例)


一、组件

1.常用视图容器类组件

view

  • 普通视图区域
  • 类似于HTML中的div,是一个块级元素
  • 常用来实现页面的布局效果
<view class="container1">
  <view>A</view>
  <view>B</view>
  <view>C</view>
</view>
.container1 view{
  width: 100px;
  height: 100px ;
  text-align: center;
  line-height: 100px;
}

.container1 view:nth-child(1){
  background-color: lightgreen;
}

.container1 view:nth-child(2){
  background-color: lightskyblue;
}

.container1 view:nth-child(3){
  background-color: lightpink;
}

.container1{
  display: flex;
  justify-content: space-around;
}

在这里插入图片描述

scroll-view

  • 可滚动的视图区域
  • 常用来实现滚动列表效果
    实现y轴滚动:(scroll-x:实现x轴滚动)

<scroll-view class="container1" scroll-y>
  <view>A</view>
  <view>B</view>
  <view>C</view>
</scroll-view>

在上诉wxss样式加入:

.container1{
  border: 1px solid red;
  width: 100px;
  height: 120px;
}

.swiper-container{
  height: 150px;
}

在这里插入图片描述

swiper、swiper-item

  • 轮播图容器组件(swiper)和轮播图item组件(swiper-item
  • swiper组件常用属性:
    在这里插入图片描述
<swiper class="swiper-container" indicator-dots indicator-color="white" indicator-active-color="gray" autoplay interval="3000" circular>
  <swiper-item>
    <!-- 第一个轮播图 -->
    <view class="item">A</view>
  </swiper-item>
  <swiper-item>
    <!-- 第二个轮播图 -->
    <view class="item">B</view>
  </swiper-item>
  <swiper-item>
    <!-- 第三个轮播图 -->
    <view class="item">C</view>
  </swiper-item>
</swiper>

加入如下样式:

.swiper-container{
  height: 150px;
}

.item{
  height: 100%;
  line-height: 150px;
  text-align: center;
}

swiper-item:nth-child(1) .item{
  background-color: lightgreen;
}

swiper-item:nth-child(2) .item{
  background-color: lightskyblue;
}

swiper-item:nth-child(3) .item{
  background-color: lightpink;
}

在这里插入图片描述

2.text、rich-text

  • text是文本标签,其属性selectable可以长按复制该标签内的内容。
  • rich-text能够通过nodes属性节点,把HTML字符串渲染为对应的UI结构。
<!-- 常用的基础内容组件 text 和 rich-text -->
<view>
  手机号支持长按选中效果
  <text selectable>18837944929</text>
</view>
<rich-text nodes="<h1 style='color:red;'>标题</h1>"></rich-text>

在这里插入图片描述

3.其他常用组件

button

  • 按钮组件
  • 功能比HTML中的button按钮丰富
  • 通过open-type属性可以调用微信提供各种功能(客服、转发、获取用户授权、获取用户信息等)
<!-- 通过 type 属性指定按钮颜色的类型 -->
<button>普通按钮</button>
<button type="primary">主色调按钮</button>
<button type="warn">警告按钮</button>
<!-- size="mini"小尺寸按钮 -->
<button size="mini">普通按钮</button>
<button type="primary" size="mini">主色调按钮</button>
<button type="warn" size="mini">警告按钮</button>
<!-- plain镂空按钮 -->
<button size="mini" plain>普通按钮</button>
<button type="primary" size="mini" plain>主色调按钮</button>
<button type="warn" size="mini" plain>警告按钮</button>

在这里插入图片描述

image

  • 图片组件
  • image组件默认宽度约300px、高度约240px
  • image组件的mode属性
    在这里插入图片描述
<image></image>
<image src="/images/1.png" mode="aspectFill"/>

加入以下样式:

image{
  border: 1px solid red;
}

在这里插入图片描述
上面的红色框可以看出image组件默认就有宽度和高度。

navigator

  • 页面导航组件
  • 类似于HTML中的链接

二、小程序API

在这里插入图片描述

三、数据绑定

1.定义页面数据

在页面对应的.js文件中,把数据定义到data对象中即可:

Page({
	data: {
		info: 'hello worrd',
		msgList: [{msg: 'hello'}, {msg: 'world'}]
	}
})

2.绑定数据

Mustache语法格式:把data中的数据绑定在页面中渲染,使用双大括号将变量包起来即可:

<view>{{要绑定的数据名称}}</view>

可以绑定内容、属性、三元运算、算数运算等等,与Vue数据绑定相似:

<view>{{info}}</view>
<image src="{{imgSrc}}" mode="widthFix"></image>
<view>{{randomNum1 >=5 ? '随机数字大于或等于5' : '随机数小于5'}}</view>
<view>生成100以内的随机数:{{randomNum2*100}}</view>
Page({
	data: {
    	info:'hello world',
    	imgSrc:'http://www.itheima.com/images/logo.png',
    	randomNum1: Math.random()*10,
    	randomNum2: Math.random().toFixed(2),
  	}
})

在这里插入图片描述

四、事件绑定

1.什么是事件

事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。
在这里插入图片描述

2.小程序中常用的事件

在这里插入图片描述

3.事件对象 的属性列表

当事件回调触发的时候,会收到一个事件对象event,它的详细如下表:
在这里插入图片描述

target和currentTarget区别

target是触发该事件的源头组件,而currentTarget则是当前事件所绑定的组件。
在这里插入图片描述
点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层view的tap事件处理函数。此时,对于外层的view来说:

  • e.target指的是触发事件的源头组件,因此e.target是内部的按钮组件
  • e.currentTarget指向的是当前正在触发事件的那个组件,因此e.currentTarget是当前的view组件。

4.bindtap的语法格式

在小程序中,不存在 HTML中的onclick鼠标点击事件,而是通过tap事件来响应用户的触摸行为。

  • 通过bindtap,可以组件绑定tap触摸事件:
<button type="primary" bindtap="btnTapHandler">按钮</button>
  • 在页面的.js文件中定义对应的事件处理函数,事件参数通过形参event(一般简写成e)来接受:
Page({
	btnTapHandler(e){
		console.log(e)
	}
})

5.在事件处理函数中为data中数据赋值

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

Page({
	data: {
		count: 0	
	},
	changeCount(){
		this.setData({
			count: this.data.count + 1
		})
	}
})

6.事件传参

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

<button type="primary" bindtap="btnTap2" data-info="{{2}}">事件传参</button>
  • info会被解析为参数的名字
  • 数值2会被解析为参数的值
  • 在事件处理函数中,通过event.target.dataset.参数名即可获取具体参数的值

7.bindinput的语法格式

在小程序中,通过input事件来响应文本框的输入事件:

<input value="{{msg}}" bindinput="inputHandler"></input>
 inputHandler(e){
    console.log(e.detail.value)//变化过后文本框最新值
}

8.实例:

<button type="primary" bindtap="btnTapHandler">按钮</button>
<button type="primary" bindtap="CountChange">+1</button>
<button type="primary" bindtap="btnTap2" data-info="{{2}}">+2</button>
<input value="{{msg}}" bindinput="inputHandler"></input>
Page({
	data: {
		count: 0,
		msg: '你好,'	
	},
//定义按钮事件处理函数
  btnTapHandler(e){
    console.log(e)
  },
//+1按钮点击事件
  CountChange(){
    this.setData({
      count: this.data.count + 1
    })
    // console.log('ok')
  },
  btnTap2(e){
    this.setData({
      count: this.data.count + e.target.dataset.info
    })
    // console.log(e)
  },
//input 输入框的事件处理函数
  inputHandler(e){
    console.log(e.detail.value)//变化过后文本框最新值
    this.setData({
      msg: e.detail.value
    })
  }
})

在这里插入图片描述
在这里插入图片描述

五、条件渲染和列表渲染

1.wx:if

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

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

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

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

结合使用wx:if

如果要一次性控制多个组件的展示与隐藏,可以使用一个标签将多个组件包装起来,并在标签上使用wx:if控制属性:

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

注意:<block>并不是一个组件,它是一个包裹性质的容器,不会在页面中做任何渲染

hidden

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

<view hidden="{{condition}}">条件为true的时候隐藏元素,否则显示</view>

wx:if与hidden的对比

在这里插入图片描述

实例

<view wx:if="{{type === 1}}"></view>
<view wx:elif="{{type === 2}}"></view>
<view wx:else> 保密 </view>
<block wx:if="{{true}}">
  <view>view1</view>
  <view>view2</view>
</block>
<view hidden="{{!flag}}">条件为true的时候隐藏元素,否则显示</view>
<view wx:if="{{flag}}">这是使用 wx:if 控制的元素</view>
Page({
  data: {
    type: 1,
    flag: true
  }

2.wx:for

通过wx:for可以根据指定的数组,循环渲染重复的组件结构:

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

默认情况下,当前循环项的索引用index表示;当前循环项用item表示。

手动指定索引和当前项的变量名*

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

wx:key的使用

类似于Vue列表渲染的:key,小程序在实现列表渲染时,也建议为渲染出来的列表项指定唯一的key值,从而提高渲染的效率。

Page({
  data: {
    userList: [
      {id: 1,name: '小红'},
      {id: 2,name: '小黄'},
      {id: 3,name: '小白'}
    ]
  }
<view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>

实例

<view wx:for="{{arr1}}" wx:key="index">
  索引是:{{index}},item 项是:{{item}}
</view>
<view wx:for="{{arr1}}" wx:for-index="idx" wx:for-item="itemName" wx:key="idx">
  索引是:{{idx}},item 项是:{{itemName}}
</view>
<view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>

<view wx:for="{{userList}}" wx:key="id" class="username">{{item.name}}</view>

在这里插入图片描述

六、WXSS模板样式

WXSS(WeiXin Style Sheets)是一套样式语言,用于美化WXML的组件样式,类似于网页开发中的CSS。

WXSS和CSS的关系

WXSS具有CSS的大部分特性,同时,WXSS还对CSS进行了扩充以及修改,以适应微信小程序的开发。
于CSS相比,WXSS扩展的特性有:

  • rpx尺寸单位
  • @import样式导入
    在这里插入图片描述

rpx尺寸单位

rpx是微信小程序独有的,用来解决屏适配的尺寸单位。鉴于不同设备屏幕大小,为实现屏幕的自动适配,rpx把所有设备的屏幕在宽度上等分为750份(即当前屏幕的总宽度为750rpx)。
rpx的原理:

  • 在较小的设备上,1rpx所代表的宽度较小
  • 在较大的设备上,1rpx所代表的宽度较大

小程序在不同设备上运行时,会把rpx的样式单位换算成对应的像素单位来渲染,从而实现屏幕适配。

rpx与px之间的单位换算*

在这里插入图片描述

七、样式

1.样式导入

在.wxss中导入,@import “路径”

@import "/common/common.wxss";

comm.wxss:

.username{
  color: red;
}

在这里插入图片描述

2.全局样式

定义在app.wxss中的样式为全局样式,作用在每一个页面。
在这里插入图片描述

3.局部样式

在页面的.wxss文件中定义的样式为局部样式,只作用于当前页面

  • 当局部样式和全局样式冲突时,根据就近原则,局部样式会覆盖全局样式
  • 当局部样式的权重大于或等于全局样式的权重时,才会覆盖全局样式
    在这里插入图片描述
    鼠标停留在样式选择器的名称上,会显示权重。

八、全局配置

1.常用全局配置

在这里插入图片描述

2.小程序窗口组成部分

在这里插入图片描述

3.app.json内的window节点

常用配置项

在这里插入图片描述

下拉刷新

(1)在全局配置app.json中的window节点添加"enablePullDownRefresh"=true。当全局开启下拉刷新功能之后,默认的窗口背景为白色。如果自定义下拉刷新窗口背景颜色,设置步骤是:在全部配置app.json中的window节点中将backgroundColor设置指定颜色的16进制颜色值,如efefef。
(2)当全局开启下拉刷新后,默认窗口的loading样式是白色,更改效果在全局配置app.json中的window节点中将backgroundTextStyle指定dark值。(仅支持dark和light)
在这里插入图片描述

上拉触底处理

在这里插入图片描述
设置上拉触底距离:
在这里插入图片描述

4.tabBar

tabBar是移动端应用常见的页面效果,用于实现多页面的快速切换。通常分为:底部tabBar和顶部tabBar。

  • tabBar中只能配置至少两个,最多五个tab页签
  • 当渲染顶部tabBar时,不显示icon,只显示文本

在这里插入图片描述

tabBar的六个组成

在这里插入图片描述

tabBar节点的配置项

在这里插入图片描述

每个tab项的配置选项

在这里插入图片描述

实例

在全局配置app.json中配置页面:
在这里插入图片描述
在全局配置app.json中,与Pages同级设置tabBar节点:
tabBar里的页面配置顺序决定底部tab的顺序

{
  "pages":[
    "pages/home/home",
    "pages/message/message",
    "pages/contact/contact",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#2b4b6b",
    "navigationBarTitleText": "浩泽学编程",
    "navigationBarTextStyle":"white",
    "backgroundColor": "#efefef",
    "enablePullDownRefresh": true
  },
  "tabBar": {
    "list": [
    {
      "pagePath": "pages/home/home",
      "text": "首页",
      "iconPath": "/images/tabs/home.png",
      "selectedIconPath": "/images/tabs/home-active.png"
    },
    {
      "pagePath": "pages/message/message",
      "text": "消息",
      "iconPath": "/images/tabs/message.png",
      "selectedIconPath": "/images/tabs/message-active.png"
    },
    {
      "pagePath": "pages/contact/contact",
      "text": "联系我们",
      "iconPath": "/images/tabs/contact.png",
      "selectedIconPath": "/images/tabs/contact-active.png"
    }
  ]
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

在这里插入图片描述

九、页面配置

1.页面配置文件的作用

小程序中,每个页面都有自己的.json配置文件,用来对当前页面的窗口外观、页面效果等进行配置。

2.页面配置和全局配置的关系

小程序中,app.json中的window节点,可以在全局配置小程序中每个页码的窗口表现。如果某些小程序页面想拥有特殊的窗口表现,此时,“页面级别的.json配置文件”就可以实现这种需求。
注意:当配置与全局配置冲突时,根据就近原则,最终的效果以页面配置为准。

3.页面配置中的常用配置项

在这里插入图片描述

九、网络请求

1.小程序中网络数据请求的限制

出于安全性考虑,小程序官方对数据接口的请求做出了如下两个限制:

  • 只能请求HTTPS类型的接口
  • 必须将接口的域名添加到信任列表中

2.配置request合法域名

需求描述:假设在自己的微信小程序中,希望请求https://www.escook.cn/域名下大的接口,配置:登录微信公众平台–>开发管理–>开发设置–>服务器域名–>修改

  • 域名只支持https协议
  • 域名不能使用IP地址或locallhost
  • 域名必须经过ICP备案
  • 服务器域名一个月内最多可申请修改5次
    在这里插入图片描述

3.发起GET请求

调用微信小程序提供的wx.request()方法,可以发起GET数据请求:

    wx.request({
      url: 'https://www.escook.cn/api/get',
      method: 'GET',
      data: {
        name: 'zs',
        age: 20
      },
      success: (res) => {
        console.log(res)
      }
    })

4.发起POST请求

调用微信小程序提供的wx.request()方法,可以发起POST数据请求:

    wx.request({
      url: 'https//www.escook.cn/api/post',
      method: 'POST',
      data: {
        name: 'ls',
        gender: '男'
      },
      success: (res) => {
        console.log(res)
      }
    })

5.在页面刚加载时请求数据

很多情况下,我们需要在页面刚加载的时候,自动请求一些初始化的数据。此时需要在页面的onLoad(在.页面.js文件内的onLoad节点)事件中调用获取数据的函数:

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getInfo()
    this.postInfo()
  }

6.跳过request合法域名校验

如果后端程序员仅仅提供了http协议的接口、暂时没有提供https协议的接口。此时为了不耽误我开发进度,我们可以直接在微信小程序开发工具中,临时开启【开发环境不校验请求域名、TLS版本及HTTPS证书】选项,跳过request合法域名的校验。

注意:跳过request合法域名的校验的选项,仅限在开发与调试阶段使用!
在这里插入图片描述

7.关于跨域和Ajax的说明

跨域问题只存在于基于浏览器的Web开发中。由于小程序的宿主环境不是浏览器而是微信客户端,所以小程序中不存在跨域问题。
Ajax技术的核心是依赖于浏览器中的XMLHttpRequest这个对象,由于小程序的宿主环境是微信客户端,所以小程序中不能叫做“发起Ajax请求”,而是叫做“发起网络数据请求”。

十、案例

黑马程序员的本地生活首页实现。

新建一个小程序项目,修改以下文件:
全局配置的app.json:

{
  "pages":[
    "pages/home/home",
    "pages/message/message",
    "pages/contact/contact"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#2b4b6b",
    "navigationBarTitleText": "本地生活",
    "navigationBarTextStyle":"white"
  },
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/home/home",
        "text": "首页",
        "iconPath": "/images/tabs/home.png",
        "selectedIconPath": "/images/tabs/home-active.png"
      },
      {
        "pagePath": "pages/message/message",
        "text": "消息",
        "iconPath": "/images/tabs/message.png",
        "selectedIconPath": "/images/tabs/message-active.png"
      },
      {
        "pagePath": "pages/contact/contact",
        "text": "联系我们",
        "iconPath": "/images/tabs/contact.png",
        "selectedIconPath": "/images/tabs/home-active.png"
      }
    ]
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

保存后生成了home、message、contact文件夹。

修改home.js:

// pages/home/home.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    swiperList: [],
    gridList: []
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getSwiperList()
    this.getGridList()
  },
// 获取轮播图
  getSwiperList(){
    wx.request({
      url: 'https://applet-base-api-t.itheima.net/slides',
      method: 'GET',
      success: (res) => {
        console.log(res)
        this.setData({
          swiperList: res.data
        })
      }
    })
  },

// 获取九宫格数据
getGridList(){
  wx.request({
    url: 'https://applet-base-api-t.itheima.net/categories',
    method: 'GET',
    success: (res)=> {
      this.setData({
        gridList: res.data
      })
    }
  })
}
,

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

修改home.wxml:

<!--pages/home/home.wxml-->
<!-- 轮播图区域 -->
<swiper indicator-dots circular interval="2000" autoplay>
  <swiper-item wx:for="{{swiperList}}" wx:key="id">
    <image src="{{item.image}}"></image>
  </swiper-item>
</swiper>

<!-- 九宫格区域 -->
<view class="grid-list">
<!-- 绑定gridList数据 -->
<navigator class="grid-item" wx:for="{{gridList}}" url="/pages/shoplist/shoplist?id={{item.id}}&title={{item.name}}" wx:key="id">
<!-- 显示图片 -->
<image src="{{item.icon}}" mode=""/>
<!-- 显示图片名称 -->
<text>{{item.name}}</text>
</navigator>
</view>

<!-- 图片区域 -->
<view class="img-box">
  <image src="/images/link-01.png" mode="widthFix"/>
  <image src="/images/link-02.png" mode="widthFix"/>
</view>

修改home.wxss:

/* pages/home/home.wxss */
swiper {
  height: 350rpx;
}
 
swiper image {
  width: 100%;
  height: 100%;
}
 
.grid-list {
  display: flex;
    /* 允许换行 */
  flex-wrap: wrap;
}
 
.grid-list .grid-item {
  width: 33%;
  height: 200rpx;
  display: flex;
  /* 纵向布局 */
  flex-direction: column;
  /* 横向居中 */
  align-items: center;
  /* 纵向居中 */
  justify-content: center;
  /* 四周白线 */
  border-right: 1px solid #efefef;
  border-bottom: 1px solid #efefef;
  /* box-sizing: border-box; */
}
 
.grid-item image {
  width: 60rpx;
  height: 60rpx;
}
 
.grid-item text {
  font-size: 24rpx;
  margin: 10px 0;
}

.img-box{
  display: flex;
  padding: 20rpx 10rpx;
  justify-content: space-around;
}

.img-box image{
  width: 45%;
}

在这里插入图片描述


总结

以上就是微信小程序快速入门01讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Seata--分布式事务

1 分布式事务基础 1.1 事务 事务指的就是一个操作单元&#xff0c;在这个操作单元中的所有操作最终要保持一致的行为&#xff0c;要么所有操作都成功&#xff0c;要么所有的操作都被撤销。简单地说&#xff0c;事务提供一种“要么什么都不做&#xff0c;要么做全套”机制。 1…

代码随想录算法训练营day60|84.柱状图中最大的矩形 |完结撒花~

84.柱状图中最大的矩形 力扣题目链接 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1 < heights.length <10^5 0 < heights[i] < 10^…

ChatGPT WPS AI 一键核对两表数据差异

业务需求,找出两个表中不相同的内容。如下图: 像这样的表格中,要找出不同的值,手动核对效率不高。 现在我们有了ChatGPT,可以由人工智能来完成这一操作,高效,快速,准确定位差异值。 指令:请找出A1:G14 单元格区域和I1:O14单元格区域的不相同部分,将两部数据区域不相…

10.1网站编写(Tomcat和servlet基础)

一.Tomcat: 1.Tomcat是java写的,运行时需要依赖jre,所以要装jdk. 2.建议配置好环境变量. 3.默认端口号8080(业务端口)可能会被占用,建议改一下(本人改成了9999). 4.另一个默认端口是8005(管理端口). 二Servlet基础(编写一个hello world代码): 整体分为7个步骤,分别是创建…

精品Python比赛报名系统竞赛

《[含文档PPT源码等]精品基于Python实现的比赛报名系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScript…

LeetCode 接雨水 木桶理论、dp预处理

原题链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题面&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a…

C语言之字符函数字符串函数篇(2)

目录 字符串查找 strstr strstr的使用 strstr的模拟实现 分析 考虑点 代码 strt strtok的使用 循环改进 错误信息报告 strerror 错误码的错误信息 strerror的使用 perror 字符操作 字符分类函数 字符转化函数 今天我们接着讲字符串函数&#xff0c;也…

Android 富文本SpannableString

一、认识SpannableString 为什么要使用富文本 在Android开发中&#xff0c;有很多UI会画出一些特别炫酷的界面出来&#xff0c;比如一个字符串里有特殊的字会有其他颜色并加粗、变大变小、插入小图片、给某几个文字添加边框&#xff0c;如果我们使用笨办法用几个TextView或者Im…

解决Spring Boot 2.7.16 在服务器显示启动成功无法访问问题:从本地到服务器的部署坑

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

JavaWeb 学习笔记 8:AJAX

JavaWeb 学习笔记 8&#xff1a;AJAX AJAX&#xff08;Asynchronous JavaScript And XML&#xff0c;异步 js 和 XML&#xff09;是一种用 js 代码异步&#xff08;或同步&#xff09;的方式请求服务端数据&#xff0c;并在页面显示或加载的技术。 1.快速入门 先看如何用纯 …

GB28181协议-注册详解

注册指的是设备或系统进入联网系统时向SIP服务器&#xff08;SIP UAS&#xff09;进行注册登记的工作模式&#xff0c;在本文中FFmpeg即为一个SIP服务器&#xff0c;设备向FFmpeg发送注册请求&#xff0c;FFmpeg在接收到设备的注册请求后返回相应的回复消息&#xff0c;则完成设…

【面试题】——Spring

1.Spring是什么&#xff1f; Spring是一个开源的Java应用框架&#xff0c;它提供了广泛的基础设施支持&#xff0c;用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型&#xff0c;通过依赖注入&#xff08;Dependency Injection&#xff09;和面向切面…

盘点神级AI绘画工具,太强太友好了

B站|公众号&#xff1a;啥都会一点的研究生 AI绘画越来越卷、越来越极致&#xff0c;可以轻松将我们这些毫无绘画功底的人的创意想法转化为令人惊叹的数字艺术作品&#xff0c;本期将整理一些目前流行的高质量AI艺术生成器&#xff0c;一起看看吧 Bing Image Creator https:/…

污水中常规五参数的检测有什么意义

便携式水质五参数检测仪包括&#xff1a; 温度、 pH、溶解氧、电导率、浊度。同时该仪器也可根据客户需要进行其他电极法指标&#xff0c; 如盐度、 TD S、OR P 指标的增添&#xff0c;以及指标的任意搭配组合。 水质常规五参数在我国水污染防治中发挥着重要的作用。 检测水质常…

spring中AbstractApplicationContext的refresh()

这个部分的源码看的次数不计其数了&#xff0c;每次看不同开源组件的调用过程中走到这里都有不同的收获。 spring 中 AbstractApplicationContext 的 refresh() 是 spring 的核心&#xff0c;几乎所有的逻辑都在是这里间接被调用。 如下源码为 spring boot 2.7.15 自带的 sprin…

MySQL主从复制与读写分离(附配置实例)

目录 一、主从复制1.1 什么是主从复制&#xff1f;1.2 MySQL支持的复制类型1.3 主从复制的工作过程1.4 主从复制的同步模式1.4.1 异步复制&#xff08;Asynchronous replication&#xff09;1.4.2 全同步复制&#xff08;Fully synchronous replication&#xff09;1.4.3 半同步…

其他网页都可以打开,只有知网打不开

问题&#xff1a;电脑自动获取DNS出现问题。 1、打开Internet协议版本4&#xff08;TCP/IPv4&#xff09; 控制面板—所有控制面板项----网络连接----WLAN—属性----Internet协议版本4&#xff08;TCP/IPv4&#xff09;—属性 2、修改DNS 将自动获得DNS服务器地址&#xff…

Sparta工具用法描述之信息收集(漏洞分析)

声明:本文仅做学习与交流,任何用于非法用途、行为等造成他人损失的,责任自负。本文不承担任何法律责任。 Sparta是python GUI应用程序,它通过在扫描和枚举阶段协助渗透测试仪来简化网络基础结构渗透测试。 通过点击并单击工具箱并以方便的方式显示所有工具输出,它可以使测…

Swing通过后台线程实现页面更新

业务场景 在swing程序中&#xff0c;我们想实现一个随着任务的执行而同步更新组件的功能&#xff0c;如果在主线程&#xff08;EDT&#xff09;中直接执行任务并更新组件&#xff0c;则会导致组件只显示最终更新的状态的问题&#xff0c;这是因为EDT是单线程的&#xff0c;在执…

【golang】深入理解Go语言垃圾回收(GC)

垃圾回收 垃圾回收版本1.3之前标记-清除&#xff08;mark and sweep&#xff09;算法标记-清除&#xff08;mark and sweep&#xff09;的缺点 版本1.5的三色并发标记法没有STW的三色标记法屏障机制强-弱 三色不等式插入屏障删除屏障 版本1.8的混合写屏障&#xff08;hybrid wr…