当前位置: 首页 > news >正文

精准信息300099/班级优化大师客服电话

精准信息300099,班级优化大师客服电话,网络安全维护是做什么,网站建设哪种语言好微信小程序开发 外部链接别人的总结查看(超详细保姆式教程) 基础语法 1.数据绑定 1.1 初始化数据 页面.js的data选项中Page({data: {motto: Hello World,id:18} })使用数据 单项数据流:Mustache 语法 a)模板结构中使用双大括号 {{data}} …

微信小程序开发 外部链接别人的总结查看(超详细保姆式教程)

基础语法

1.数据绑定

1.1 初始化数据

  • 页面.js的data选项中
    Page({data: {motto: 'Hello World',id:18}
    })
    
  • 使用数据
  1. 单项数据流:Mustache 语法
    a)模板结构中使用双大括号 {{data}}

       	<text id="{{id}}">{{motto}}</text><input type="text" value="{{motto}}"/>
    
  2. 双向数据绑定

  • a)表单项使用 model:value = ‘{{data}}’

    <input type="text" model:value="{{motto}}"/>
    
  • b)坑!!!

    • i.双向数据绑定数据变量名不能是简单的a, b, c,否则无法实现
    • ii.双向数据绑定不能绑定data路径,如: a.b
      <input type="text" model:value="{{a}}"/>
      

1.2 修改数据

  1. this.setData({message: ‘修改之后的数据’}, callback)
  2. 特点:
  • a)同步修改: this.data值被同步修改
  • b)异步更新: 异步将setData 函数用于将数据从逻辑层发送到视图层(异步)
  1. 注意点:
  • a)直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致。
  • b)单次设置的数据不能超过1024kB,请尽量避免一次设置过多的数据。
    Page({data: {motto: 'Hello World',a: 'abc'},onLoad(){this.setData({motto: 'change data'})}
    })
    

2.事件绑定

2.1 事件分类

    1. 冒泡事件
    • a) 定义:冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
    • b) 冒泡事件列表:冒泡官网地址
  • 2)非冒泡事件

    • a) 定义:当一个组件上的事件被触发后,该事件不会向父节点传递。
    • b) 非冒泡事件:表单事件和自定义事件通常是非冒泡事件
      非冒泡事件官网地址

2.2 绑定事件

  1. bind绑定:事件绑定不会阻止冒泡事件向上冒泡

    <view bindtap="handleTap" class='start_container'><text class='start'>开启小程序之旅</text>
    </view>
    
  2. catch 绑定: 事件绑定可以阻止冒泡事件向上冒泡

    <view catchtap="handleTap" class='start_container'><text class='start'>开启小程序之旅</text>
    </view>
    

2.3 向事件对象传参

  1. 语法: data-key=value
 <button catchtap="changeName" data-name='{{firstName}}'>点击修改名称</button>
  1. 获取: event.target.dataset.key || event.currentTarget.dataset.key

  2. Event.target 和 event.currentTarget的区别
    a.) Event.target是触发事件的对象,但不一样是绑定事件的对象,如: 事件委托,冒泡
    b) currentTarget触发事件的对象一定是绑定事件的对象, 没有事件委托

3.列表渲染

3.1 语法说明

  1. wx:for="{{arr}}"
  2. wx:key="唯一值或者index"
  <view wx:for="{{ list }}" wx:key="id"><view>{{ index }} --  {{ item.content }}</view> </view>

3.2 wx:key

  1. 同Vue一样,循环遍历的时候需要为每一个item添加唯一的key值

  2. Key值分类:

    a)Item本身就是唯一值,如: number,string
    b)*this,代表item本身,同样需要item自身是唯一的,如;number,string
    c)Item的唯一属性,如: id; 官网没有明确语法说明,只能在示例代码中找到

  3. 注意事项:

    a)Wx:key后跟的变量不需要使用插值语法,即不需要使用大括号包裹
    b)Item中如果有唯一值属性,可以直接使用
    如:item = {id: 1}, 则wx:key = 'id'

3.3 重新命名

1.默认的个体: item
2.默认的下标: index
3.自定义个体变量名称: wx:for-item=’myItem’
4.自定义下标变量名称: wx:for-index=’myIndex’

<view wx:for="{{ list }}" wx:key="id" wx:for-item="myItem" wx:for-index="myIndex"><view>{{ myIndex}} -- {{myItem.content}}</view>
</view>

4. 条件渲染

4.1 语法说明

  1. wx:if=’条件’
  2. wx:elif=’条件’
  3. wx:else
    <view><!-- 条件渲染 --><view wx:if="{{ isShow }}">表白成功</view><view wx:else>表白失败</view><!-- <view wx:else="{{ !isShow }}">表白失败</view> --><view>-----------------</view><view wx:if="{{ sex === 0 }}"></view><view wx:elif="{{ sex === 1 }}"></view><view wx:else>未知</view>
    </view>
    

4.2 wx:if VS hidden 区别

1.hidden用法: <view hidden='{{true}}' ></view>
2.wx:if 等同于 v-if, 条件为false的时候不加载,条件切换的时候决定元素销毁或者重新加载渲染
3.hidden 等同于 v-show, 始终加载元素, 条件切换的时候决定元素的显示和隐藏

5. 模板使用

5.1 定义模板

在这里插入图片描述

5.2 引入模板

  1. 引入模板结构:
  2. 引入模板样式: @Import ‘模板样式路径’

5.3 使用模板

在这里插入图片描述

5.4 向模板导入数据并使用数据

在这里插入图片描述

6.生命周期

官方图示:官方图

在这里插入图片描述

生命周期函数执行时机执行次数特点说明
onLoad页面加载时触发1可以通过参数获取打开当前页面路径中的参数
onShow页面显示/切入前台时触发多次如页面没有被销毁,会重复多次显示隐藏,可以在此发送请求获取最新数据
onReady页面初始化渲染完成时触发1可以同UI界面进行交互
onHide页面隐藏/切入后台时触发多次wx.navigateTo 或底部 tab 切换到其他页面,小程序切入后台等
onUnload页面卸载时触发1wx.redirectTo或wx.navigateBack到其他页面时

个人见解

官网生命周期图示是错误的;错误部分:标注onLoad及onShow执行的位置不对

参考:小程序启动执行的所有流程

参考地址:

https://developers.weixin.qq.com/miniprogram/dev/framework/performance/tips/start_process.html

7.小程序适配方案: rpx (responsive pixel响应式像素单位)

小程序适配单位: rpx

规定任何屏幕下宽度为750rpx

小程序会根据屏幕的宽度不同自动计算rpx值的大小

Iphone6下: 1rpx = 1物理像素 = 0.5px

在这里插入图片描述

8. 小程序API

8.1 API使用说明

  1. 小程序提供了很多实用的方法供开发者使用
  2. 小程序全局对象是: wx
  3. 所有的API都保存在wx对象中

8.2 常用API

  1. 界面交互
    a)显示消息提示框: wx.showToast()
    b)显示消息加载框: wx.showLoading()
    c)关闭消息提示框: wx.hideToast()
    d)关闭消息加载框: wx.hideLoading()
    e)提示消息警告框:wx.showModal()
  2. 路由跳转
    a)wx.navigateTo() 保留当前页面,跳转到应用内的某个页面
    b)wx.redirectTo() 关闭当前页面,跳转到应用内的某个页面
    c)wx.switchTab() 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
  3. 网络请求
    a)wx.request()
  4. 本地存储
    a)wx.setStorage() 异步设置
    b)wx.setStorageSync() 同步设置
    c)wx.getStorage() 异步获取
    d)wx.getStorageSync() 同步获取
  5. 媒体
    a)wx.getBackgroundAudioManager() 获取全局唯一的背景音频管理器
    b)wx.playVoice()
    6.支付
    a)Wx.requestPayment()

8.3 快速查找技巧

  1. 小程序的初学者可能对于小程序的官网的众多内容一时毫无头绪,无从下手不知道从哪来找想要的内容
  2. 当在小程序中想要实现某一种布局,查看:组件
  3. 当在小程序中想要实现某一个功能,查看: API
  4. 当在小程序中想要进行某一个配置或者某一种页面语法,查看: 框架 + 指南
  5. 查看小程序官网的时候要细心,最好是将要使用的API的相关内容看完整,因为API的配置及限制较多

9.组件传参

组件传参 - 把标题"猜你喜欢", "人气推荐"传入到组件中

怎么传? — 标签直接帮属性即可

<goods-list title="猜你喜欢" list="{{likeList}}"></goods-list>

怎么接?

组件内使用 properties 接(不支持数组,支持对象和配置对象)

// 不支持数组写法
// properties: ["title"],
// 支持对象写法
// properties: {
//   title: String,
// },
// 支持配置对象写法
properties: {title: {type: String,required: true},list: {type: Array,required: true}
},

路由传参query

使用标签和js都可以跳转

  1. 标签跳转

    <navigatorurl="/pages/goods/list/list?category2Id={{item.id}}"
    ></navigator>
    

    同时携带了 query 参数(路由带参)

  2. js跳转

    wx.navigateTo({url: '/pages/goods/list/list',
    });
    

    没带参数

跳转页面的API

wx.switchTab 跳转到tabbar页面
wx.redirectTo  关闭当前页面,跳转下一个页面,当前页面不在历史记录中
wx.navigateTo  跳转页面(有历史记录)
wx.navigateBack({ delta: 1 }) 回退页面,没有参数默认是1
wx.reLaunch   关闭所有的页面,打开到应用内的某个页面

进阶知识

1. 小程序本地存储

1.1 语法说明

  1. 存入数据
    a)wx.setStorage() 异步
    b)wx.setStorageSync() 同步
    在这里插入图片描述

  2. 读取数据
    a)wx.getStorage()异步
    b)wx.getStorageSync() 同步
    在这里插入图片描述

  3. 删除数据
    a)wx.removeStorage() 异步
    b)wx.removeStroageSync() 同步
    在这里插入图片描述

  4. 清空数据
    a)wx.clearStorage() 异步
    b)wx.clearStorageSync() 同步
    在这里插入图片描述

1.2 注意事项

  1. 除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用
  2. 单个 key 允许存储的最大数据长度为 1MB
  3. 所有数据存储上限为 10MB

1.3 官网对应地址

https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorage.html
在这里插入图片描述

2. 小程序前后端交互

2.1 语法说明

  1. wx.request()
    在这里插入图片描述

2.2 相关配置

  1. 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信
  2. 服务器域名请在 「小程序后台-开发-开发设置-服务器域名」 中进行配置
  3. 默认超时时间和最大超时时间都是 60s
  4. 超时时间可以在 app.json 中通过 networktimeout 配置

2.3 注意事项

  1. 小程序为了安全起见只支持Https请求
  2. wx.request最大并发限制10个

2.4 官网对应地址

https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorage.html
在这里插入图片描述

3. 小程序页面通信

3.1 路由传参

  1. 传参方式
    a) 路由地址中 + query传参数
    b)示例: url?a=123
    wx.navigateTo({url: '/pages/target/target?a=1&b=2',
    });
    
  2. 获取参数
    a)跳转目标页面的onLoad函数中的options实参中获取
    onLoad(options){const {a, b} = options;
    }
    

3.2 消息订阅发布

  1. 使用第三方库: pubsub-js
  2. 安装: npm install pubsub-js
  3. 使用:
    a)import PubSub from ‘pubsub-js’
    b)订阅消息: PubSub.subscribe(‘eventName’, callback)
    c)发布消息: PubSub.publish(‘eventName’, data)
    d)取消订阅: PubSub.unsubscribe(‘eventName’)

3.3 eventChannel 事件通道

  1. 订阅事件
    a)wx.navigateTo()跳转的时候在events选项中定义事件名及事件对应的回调
    在这里插入图片描述

  2. 获取事件总线对象
    a)目标页面中通过: 实例.getOpenerEventChannel()
    b)示例: const eventChannel = this.getOpenerEventChannel()

  3. 触发事件
    a)eventChannel.emit(‘事件名’, data)
    在这里插入图片描述

3.4 借助app传参

  1. 获取App
    const app = getApp()
  2. 在app上写入数据
    app.currentAddress = currentAddress;
  3. 获取数据
    const app = getApp()
    let currentAddress = app.currentAddress 获取数据

4. 小程序自定义组件

4.1. 创建组件

  1. 开发工具中在指定的文件夹下右键新建组件
    a)建议:文件夹名称与组件名称最好一致。
  2. 组件对应的json文件中设置: component: true
{"component": true,"usingComponents": {}"navigationStyle": "custom"  -----> 自定义导航  导航栏样式"navigationBarTitleText": "登录"   -----> 自定义文字
}

4.2. 使用组件

1.使用组件的页面的json文件中注册使用组件

{"usingComponents": {"goods-list": "/components/goods-list/goods-list"}
}
<goods-list title="猜你喜欢" list="{{ likeList }}"></goods-list>

5. 小程序使用npm包

5.1 初始化package.json

npm init

5.2 勾选允许使用npm(老版本)

老版本需要勾选
新版本已全面支持,没有当前选项
在这里插入图片描述

5.3 下载npm包

npm install packageName

5.4 构建npm

  1. 微信开发工具 —> 工具选项 —> 构建npm
  2. 会将node_modules中的包打包到miniprogram_npm中
    a)小程序中使用的第三方包内容会去miniprogram_npm中查找而不是node_modules
  3. 注意:
    a)开发中如果使用UI组件库,每次引入新的组件使用可能会导致样式不能生效,需要再次重新构建npm即可

5.5 流程执行不完整带来的错误

在这里插入图片描述

6.小程序登录流程

6.1 刚刚被作废的方式

6.1.1 首次获取

  1. Button组件设置open-type属性为getUserInfo
  2. <button open-type=’getUserInfo’></button>
  3. 设置后首次登陆点击button可以弹出授权窗口
  4. 注意: 授权的动作只发生一次,除非清除缓存,点击butotn授权一次之后再点击失效,不会弹出授权窗口
  5. 官网对应地址
    https://developers.weixin.qq.com/miniprogram/dev/component/button.html
    在这里插入图片描述

6.1.2 授权之后获取

  1. wx.getUserInfo()
  2. 官网对应地址:
    https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html

6.1.3 作废说明

a) 依然可以使用,但不会出现授权弹窗
b) 获取到的用户名为 ‘微信用户’, 头像为灰色头像

6.2 目前推荐登录方式

6.2.1 通过token标识用户

  1. 通过用户临时登录code获取用户唯一标识token
  2. 如果需要展示用户头像和用户自定义用户名可通过页面引导用户自行设置

6.2.2 登录流程图解

在这里插入图片描述

8.6.2.3 登录流程说明

  1. wx.login()
    code是临时标识,只有5分钟内有效在这里插入图片描述

  2. 发送code给服务器端

  3. 服务器端发送请求携带参数(code, appSecret, appId)给微信服务器获取openId
    a) 微信接口API: GET https://api.weixin.qq.com/sns/jscode2session

  4. appSecret,appId在小程序首页获取
    在这里插入图片描述

  5. 服务器获取openId后进行加密返回给前端Token标识

7. 小程序使用UI组件库vant

7.1 下载安装

  • Npm安装
    npm i @vant/weapp -S --production
  • Yarn安装
    yarn add @vant/weapp –production

7.2 修改app.json

  • 操作: 将 app.json 中的 “style”: “v2” 去除
  • 原因:程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。

7.3 修改project.config.json

"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}
],

7.4 构建npm

微信开发工具 —> 工具 —> 构建npm

7.5 引入组件

  1. 页面.json文件中
{"usingComponents": {"van-action-sheet": "@vant/weapp/action-sheet/index","van-stepper": "@vant/weapp/stepper/index","van-icon": "@vant/weapp/icon/index","van-button": "@vant/weapp/button/index"}
}

8.7.6 使用组件

<van-button block type="primary" round bindtap='handleSubmit'>确定</van-button>

8. 小程序分包流程

8.1 为什么要分包

  1. 小程序要求压缩包体积不能大于2M,否则无法发布
  2. 实际开发中小程序体积如果大于2M就需要使用分包机制进行发布上传
  3. 分包后可解决2M限制,并且能分包加载内容,提高性能
  4. 分包后单个包的体积不能大于2M
  5. 包后所有包的体积不能大于20M

8.2 分包形式

  1. 常规分包
  2. 独立分包
  3. 分包预下载
  4. 分包异步化

8.3 常规分包

  1. 开发者通过在 app.json subpackages 字段声明项目分包结构
  2. 特点:
  • a)加载小程序的时候先加载主包,当需要访问分包的页面时候才加载分包内容
  • b)分包的页面可以访问主包的文件,数据,图片等资源
  • c)主包:
    • i.主包来源: 除了分包以外的内容都会被打包到主包中
    • ii.通常放置启动页/tabBar页面
  1. 注意点:root包名必须是当前分包目录名

在这里插入图片描述

在这里插入图片描述

8.4 独立分包

  1. 设置 independent为true
  2. 特点:
  • a)独立分包可单独访问分包的内容,不需要下载主包
  • b)独立分包不能依赖主包或者其他包的内容
  1. 使用场景
  • a)通常某些页面和当前小程序的其他页面关联不大的时候可进行独立分包
  • b)如:临时加的广告页 || 活动页
    在这里插入图片描述

8.5 分包预下载

  1. 配置
  • a)app.json中设置preloadRule选项
  • b)key(页面路径): {packages: [预下载的包名 || 预下载的包的根路径])}
    在这里插入图片描述
    在这里插入图片描述
  1. 特点:
  • a) 在加载当前包的时候可以设置预下载其他的包
  • b) 缩短用户等待时间,提高用户体验

8.6 分包异步化

  1. 理解:
    a)独立分包不能依赖其他分包文件,如果要加载使用其他分包怎么办?
  2. 设计思想:
    a)等待其他分包加载后,异步加载依赖文件
  3. 异步分类
  • a)异步加载组件

    • i.使用内置组件设置占位
    • ii.等待异步加载后再加载使用依赖的组件
    • iii.设置选项:对应组件json文件中 ‘componentPlaceholder’ 字段
      // subPackageA/pages/index.json
      {
      "usingComponents": {
      "button": "../../commonPackage/components/button",
      "list": "../../subPackageB/components/full-list",
      "simple-list": "../components/simple-list"
      },
      "componentPlaceholder": {
      "button": "view",
      "list": "simple-list"
      }
      }
      
  • b)异步加载js文件

    • require 方法
    • 回调函数方式
      /* 回调函数形式 */let findUserAddress, delAddress;require('../../../../utils/api', utils => {findUserAddress = utils.findUserAddress;delAddress = utils.deleteAddress;}, ({mod, errMsg}) => {console.error(`path: ${mod}, ${errMsg}`)})
    
    • Promise方法
      /* promise形式 */(async function(){let utils = await require('../../../../utils/api')console.log(utils)findUserAddress = utils.findUserAddress;delAddress = utils.deleteAddress;})()
    

8.7 分包效果演示

在这里插入图片描述

8.8 官网对应地址

https://developers.weixin.qq.com/miniprogram/dev/framework/subpackages.html

9. 小程序转发分享

9.1 分享实现

  1. Button组件设置open-type为share
  2. <button open-type=’share’ ></button>

9.2 自定义分享内容

  1. 生命周期回调中onShareAppMessage回调中return 对象设置自定义内容
    在这里插入图片描述

9.3 设置体验权限

  1. 开发阶段分享给微信好友,默认没有体验权限,无法打开分享小程序,需要在开发页面设置
  2. 最多添加15个微信好友
    在这里插入图片描述

10. 小程序支付流程

10.1 支付流程官网图解

在这里插入图片描述

10.2 支付流程详细说明

  1. 用户在小程序客服端下单
    • a)用户标识token
    • b)商品信息: id,数量,附属信息(备注等)
    • c)地址信息
  2. 小程序客户端发送下单支付请求给商家服务器
    • a)获取商家订单id
  3. 商家服务器发送请求调用统一下单API获取预支付订单信息
    • a)接口地址: https://api.mch.weixin.qq.com/pay/unifiedorder
  • b)需要携带参数
    1. 用户openid
    2. 商户id
    3. 商户订单id
    4. 。。。
  1. 商家对预支付信息签名加密后返回给小程序客户端
    • a)签名方式: MD5
    • b)签名字段:小程序ID, 时间戳, 随机串,数据包,签名方式
    • c)参考地址: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
  2. 用户确认支付(鉴权调起支付)
    • a)API: wx.requestPayment()
    • b)鉴权通过后客户端调起输入框,用户输入支付密码
    • c)注意:模拟器上会弹出二维码需要使用当前开发者微信扫码进行支付操作
  3. 微信服务器返回支付结果给小程序客户端
    • a)支付成功后客户端发送请求给商家服务器查询订单信息
    • b)根据订单信息决定如何跳转页面及展示信息给用户
  4. 微信服务器推送支付结果给商家服务器端

10.3 官网对应地址

https://pay.weixin.qq.com/wiki/doc/apiv3_partner/open/pay/chapter2_8_2.shtml

10.4 描述

整体流程:

  1. 用户下单,发请求给商家服务器(这一步前端做),商家服务器生成订单,然后给腾讯服务发请求,生成预付单,生成腾讯生成预付单的目的是为了知道这个订单要收多少钱,腾讯服务知道收多钱之后反馈给商家服务器,生成支付签名信息返回给小程序

  2. 小程序端接收到商家返回的支付签名信息,调用 wx.requestPayment() 发起微信支付(这一步前端做)

  3. 发起之后要去腾讯服务鉴权,鉴定有没有实名、有没有绑定银行卡,鉴权成功之后告诉小程序可以调起微信支付,此时要去弹出密码输入框(这一步是调用完 requestPayment)小程序自己和腾讯服务的交互

  4. 小程序弹出密码弹框,用户输入密码,授权付款,钱在腾讯服务上,所以授权要发送给腾讯服务,腾讯服务接到授权后,会把用户账号中的款扣了,把钱划给商家,返回支付成功告诉用户,提示"支付成功",这里的支付成功可以理解为"扣款成功"(这时会弹一个弹框,微信弹的)

    在这个步骤的同时,会异步告诉商家服务,该用户已经付款,可以发货

  5. 点击微信弹出弹框确认之后,要回到商家的小程序,小程序也要提示用户"订单支付成功",所需小程序发请求给商家服务,商家服务接到请求之后,找腾讯服务确认用户是否支付成功,确认之后,返回给用户支付成功的数据,小程序展示"订单支付成功"页面

前端步骤:

  1. 调用创建订单接口,创建出订单,返回 orderId

  2. 拿着 orderId 获取支付信息

  3. 拿着支付信息调用 wx.requestPayment() 去支付

    只有支付成功之后,才会走 wx.requestPayment() 的 success 回调

  4. 在支付成功之后,调用接口查询订单状态(已支付),跳转支付成功页

项目中使用的

1.导航设置★

app.json

{"pages":["pages/index/index"],"window":{"navigationBarBackgroundColor": "#9c0211","navigationBarTitleText": "慕尚花坊","navigationBarTextStyle":"white"},
}

2.小程序中的ui

2.1. swiper 轮播

 <swiperclass="banner-container"indicator-dotsindicator-color="#fff"indicator-active-color="#ff734c"autoplaycircularinterval="2200"duration="400"><swiper-itemclass="banner-item"wx:for="{{ bannerList }}"wx:key="id"><image class="banner-img" src="{{ item.imageUrl }}"></image></swiper-item></swiper>

2.2. image 组件

<view class="action"><image class="action-img" src="{{backgroundImg}}" mode="widthFix"></image>
</view>注意: image 组件的 mode="widthFix" 是设置宽度,保持图片的宽高比不变,自己去算高度

2.3scroll-view 的使用

页面宽高设置100%是相对于父级的,而父级是 page 这个元素,这个元素需要设置 宽高100%才可以,这个元素样式在 app.wxss 中设置,这是个全局的,每个页面的根元素都是 page 这个元素

  <!-- scroll-view 如果要使用flex布局,需要设置enable-flex属性 -->
<view class="category-container"><view class="menu"><scroll-viewclass="menu-list"scroll-y><view class="menu-item active">鲜花玫瑰</view><view class="menu-item">鲜花玫瑰</view><view class="menu-item">鲜花玫瑰</view><view class="menu-item">鲜花玫瑰</view></scroll-view></view>

注意:scroll-view 如果要使用flex布局,需要设置enable-flex属性

2.4 button

  1. button 组件添加 open-type="chooseAvatar" 属性点击才能展示出选择头像的弹框

  2. input 组件添加 type="nickname" 属性才能弹出选择昵称的弹框

3.封装 request.js 文件★


function request ({url,method = 'GET',data,header = {},timeout = 30000
}) {wx.showLoading({ title: '加载中' }); // 显示loadingconst baseURL = `https://gmall-prod.atguigu.cn`header = {'content-type':'application/json',...header}// 获取个人信息需要携带tokenlet token = wx.getStorageSync("TOKEN");if (token) {header.token = token}return new Promise((resolve, reject) => {// wx.request 微信提供的,直接用,没有跨域这一说wx.request({url: baseURL + url, // 请求的urlmethod, // 请求方式data, // 携带数据header, // 请求头timeout, // 超时时间dataType: 'json', // 数据类型是jsonresponseType: 'text', // 响应类型是文本success: (response) => { // 请求成功之后会执行success回调let res = response.data // 拿到响应体(也就是后端返回的数据,包含code、data、message)if (res && res.code == 200) {resolve(res.data)} else if (res.code == 208) { // 未登录的兜底处理,只要返回code是208都去登录页wx.showModal({title: '警告',content: '未登录,请先登录',showCancel: true,cancelText: '取消',cancelColor: '#000000',confirmText: '确定',confirmColor: '#3CC51F',success: (result) => {console.log(result)if(result.confirm){ // 点击确认跳转登录页wx.navigateTo({url: '/pages/login/login'});}}});} else {// 弹出提示框wx.showToast({ // 给用户提示title: '请求失败',icon: 'error', // none success error// image: '/static/images/1.png',duration: 1500});console.error(res) // 给程序员看的reject(res || '请求失败')}},fail: (err) => { // 请求失败执行的回调(断网的时候会走到fail中,超时也会只有fail,url错误(指url不是字符串)也会走fail)wx.showToast({ // 给用户提示title: '请求失败',icon: 'error',duration: 1500});console.error(err) // 给程序员看的reject(err)},complete: () => { // 不管成功失败都会执行的回调wx.hideLoading(); // 隐藏loading}});})}export default request

4.关于路径映射@★

在 app.json 中配置

{"resolveAlias": {"@/*": "/*"},
}

5. 底部tabbar 配置★

地址: https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar

app.json 文件中配置

"tabBar": {"color": "#333","selectedColor": "#ff582f","list": [{"pagePath": "pages/index/index","text": "首页","iconPath": "/static/tabbar/home-icon1.png","selectedIconPath": "/static/tabbar/home-icon1-1.png"},{"pagePath": "pages/category/category","text": "分类","iconPath": "/static/tabbar/home-icon2.png","selectedIconPath": "/static/tabbar/home-icon2-2.png"},{"pagePath": "pages/cart/cart","text": "购物车","iconPath": "/static/tabbar/home-icon3.png","selectedIconPath": "/static/tabbar/home-icon3-3.png"},{"pagePath": "pages/personal/personal","text": "我的","iconPath": "/static/tabbar/home-icon4.png","selectedIconPath": "/static/tabbar/home-icon4-4.png"}]
},

6.分页处理★onReachBottom的使用

onReachBottom的使用 页面触底回调

  1. 页面触底的时候要发送请求,需要页面触底的回调(于data配置项同级)

    data: {......status: 'more' // 页面发请求的状态,总共有以下几个值:  'more'更多 'no-more'没有更多 'loading'加载中 'error'错误
    },
    // 页面触底回调
    onReachBottom() {if (this.data.status == 'no-more') {return}// 翻页this.setData({page: this.data.page + 1})this.getGoodsList()
    },async getGoodsList() {this.setData({ status: 'loading' })// 组转数据const { page, limit, category2Id } = this.datalet data = {}if (category2Id) {data.category2Id = category2Id}// 发送请求try {let result = await reqGoodsList(page, limit, data)let goodsList = this.data.goodsList.concat(result.records) // 之前列表中的值不能清空let status = 'more'if (goodsList.length == result.total) { // 当获取到所有的数据之后,状态改为no-morestatus = 'no-more'}......
    

这里使用 goosList.length 和 totoal 去判断也可以

相关文章:

小程序的使用

微信小程序开发 外部链接别人的总结查看&#xff08;超详细保姆式教程&#xff09; 基础语法 1.数据绑定 1.1 初始化数据 页面.js的data选项中Page({data: {motto: Hello World,id:18} })使用数据 单项数据流&#xff1a;Mustache 语法 a)模板结构中使用双大括号 {{data}} …...

Spring整合tomcat的WebSocket详细逻辑(图解)

主要解决存在的疑问 为什么存在2种spring整合websocket的方式&#xff0c;一种是使用ServerEndpoint注解的方式&#xff0c;一种是使用EnableWebSocket注解的方式&#xff0c;这2种有什么区别和联系&#xff1f;可以共存吗&#xff1f;它们实现的原理是什么&#xff1f;它们的各…...

【笔试强训选择题】Day37.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言一、Day…...

如何使用HTTP代理爬虫,防止对网站造成负面影响

在当今大数据时代&#xff0c;爬虫技术已经成为了获取数据的重要手段之一。但是&#xff0c;由于爬虫程序的高频访问容易对目标网站造成负面影响&#xff0c;如增加服务器负载、影响网站性能等&#xff0c;因此&#xff0c;如何使用HTTP代理爬虫防止对网站造成负面影响成为了一…...

磐基2.0搭建es集群

参考&#xff1a; k8s安装elasticsearch集群 k8s安装elasticsearch集群_k8s部署elasticsearch集群_MasonYyp的博客-CSDN博客1 环境简述搭建es集群需要使用的技术如下&#xff1a;k8s集群、StatefulSet控制器、Service&#xff08;NodePort&#xff09;服务、PV、PVC、volumeC…...

Java中IO类扫盲篇

文章目录 一、简介二、字节流与字符流1. 字节流&#xff08;InputStream、OutputStream&#xff09;介绍与用法2. 字符流&#xff08;Reader、Writer&#xff09;介绍与用法 三、文件操作与目录遍历1. File类的基本使用2. 目录遍历与递归操作 四、序列化与反序列化1. 序列化与反…...

中秋国庆双节将至,企业如何进行软文推广?

节点营销是每个企业都会面临的课题&#xff0c;中秋国庆双节将至&#xff0c;这两个节日不仅是人们消费的高峰期&#xff0c;也是各大企业通过节日营销提高品牌知名度和美誉度的最佳时机&#xff0c;节点营销的方式之一就是软文推广&#xff0c;那么企业应该如何利用双节来进行…...

SpringMvc--CRUD

目录 一.什么是SpringMvc--CRUD 二.前期准备 公共页面跳转(专门用来处理页面跳转) 三.ssm之CRUD后端实现 配置pom.xml 双击mybatis-generator:generate自动生成mapper 编写generatorConfig.xml 项目结构 编写PagerAspect切面类 编写hpjyBiz接口类 编写hpjyBizImpl接…...

数据库去重(MYSQL和ORACLE)

一、数据库中的去重操作&#xff08;删除数据库中重复记录的SQL语句&#xff09;主要有三种方法 &#xff08;1&#xff09;、rowid方法 &#xff08;2&#xff09;、group by 方法 &#xff08;3&#xff09;、distinct方法 1、用rowid方法 根据Oracle带的rowid属性&#…...

微服务-kubernetes安装

文章目录 一、前言二、kubernetes2.1、Kubernetes (K8S) 是什么2.1.1、主要特性&#xff1a;2.2.2、传统部署方式&#xff1a;2.2.3、虚拟机部署2.2.4容器部署2.2.5什么时候需要 Kubernetes2.2.6、Kubernetes 集群架构 三、kubernetes安装3.1、主节点需要组件3.1.1、设置对应主…...

stm32f103zet6移植标准库的sdio驱动

sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现&#xff0c;但一是文件结构有点复杂&#xff0c;二是相比于国内正点原子和野火的板子也有点不同&#xff0c;因此还是需要移植下才能使用。当然也可以直接使用正点原子或野火提供的实例&#xff0c;但为了熟…...

为什么vector容器的begin()既可以被iterator 也可以被const_iterator指向?

答&#xff1a;vector容器中的begin&#xff08;&#xff09;是函数接口&#xff0c;它作为函数&#xff0c;被重载了。 typedef T* iterator; typedef const T* const_iterator; iterator begin();//括号中有隐含形参*this&#xff1b; const_iterator begin() const;//形参为…...

uniapp里textarea多行文本输入限制数量

uniapp里textarea多行文本域实现输入计数 <template><view class"inputs"><textarea class"text1" maxlength50 placeholder请输入... input"sumfontnum"></textarea><text class"text2">{{fontNum}}/…...

真香:Alibaba开源GitHub星标100K微服务架构全彩进阶手册

前言&#xff1a; 微服务架构作为一种高效灵活的应用架构&#xff0c;正在成为企业级应用开发的主流选择。在众多的微服务架构指南中&#xff0c;阿里巴巴开源的GitHub微服务架构全彩进阶手册备受瞩目&#xff0c;其100star更是证明了其在开发者社区中的重要地位。 这本手册汇…...

Mysql--事务

事务 开始之前&#xff0c;让我们先想一个场景&#xff0c;有的时候&#xff0c;为了完成某个工作&#xff0c;需要完成多种sql操作 比如转账 再比如下单 第一步 我的账户余额减少 第二步 商品的库存要减少 第三步 订单表中要新增一项 事务的本质&#xff0c;就是为了把多个操…...

【算法题】小红书2023秋招提前批算法真题解析

文章目录 题目来源T1&#xff1a;5900: 【DP】小红书2023秋招提前批-连续子数组最大和5801: 【二分查找】小红书2023秋招提前批-精华帖子解法1——排序滑动窗口解法2——前缀和 二分查找 5000: 【模拟】小红书2023秋招提前批-小红的数组构造解法——数学 5300: 【哈希表】小红…...

序列到序列学习(seq2seq)

permute(1,0,2)&#xff0c;将batch_size 放在中间state 最后一个时刻&#xff0c;每个层的输出...

基于Java+SpringBoot+Vue摄影分享网站的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

接口测试系列 —— POSTMAN的简单使用

postman的基本使用 概述 我相信对于postman的介绍&#xff0c;网上一搜肯定很多很多。下面我就不打算跟大家普及postman了。只看应该怎么用postman进行接口测试。好了&#xff0c;下面咱们直接进入正文吧。 环境 postman之前是作为chrome插件形式存在的。后面变成了独立的应…...

一个帮各位填秋招表格省一点事的浏览器插件

最近应该很多和我一样的双非鼠鼠在秋招等面试&#xff0c;而且处于海投阶段&#xff0c;为了不忘记投了哪些公司&#xff0c;可以用这样一个表格来记录&#xff1a; 其中有些字段&#xff0c;比如状态、投递时间、查看进度的网址其实可以不手动输入&#xff0c;所以搞个插件来…...

react16之前diff算法的理解和总结

此篇文章所讨论的是 React 16 以前的 Diff 算法。而 React 16 启用了全新的架构 Fiber&#xff0c;相应的 Diff 算法也有所改变&#xff0c;本片不详细讨论Fiber。 fiber架构是为了支持react进行可中断渲染&#xff0c;降低卡顿&#xff0c;提升流畅度。 react16之前的版本&…...

JavaEE初阶(1)(冯诺依曼体系、CPU、CPU基本原理、如何衡量CPU的好坏?指令、操作系统、操作系统“内核”)

目录 冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09; CPU CPU基本原理&#xff1a; 如何衡量CPU的好坏&#xff1f; 1、主频&#xff08;时钟速度&#xff09;&#xff1a; 2、核心数&#xff1a; 指令 操作系统 操作系统“内核” 冯诺依曼体系&#x…...

记录在yapi上传接口的问题

sorry ,upload api error cause:请求参数 data.path 不应少于 1 个字符 自己在写的代码中使用到了DeleteMapping DeleteMapping("/deleteCart/{skuId}")public Result deleteCart(PathVariable Long skuId,HttpServletRequest request){报上面的错误&#xff0c;原因…...

DevOps管理软件生命周期

整体的软件开发流程 PLAN&#xff1a;开发团队根据客户的目标制定开发计划 CODE&#xff1a;根据PLAN开始编码过程&#xff0c;需要将不同版本的代码存储在一个库中。GIT,SVN BUILD&#xff1a;编码完成后&#xff0c;需要将代码构建并且运行。MAVEN TEST&#xff1a;成功构建…...

快速解决 adb server version doesn‘t match this client

这个问题是由于电脑上安装了多个版本的adb工具&#xff0c;客户端和服务端的版本不一致&#xff0c;无法正常通信导致。最快的解决方法就是将Android SDK中adb复制到系统目录下。 操作步骤如下&#xff1a; 1. 查看adb版本和路径 执行adb version&#xff0c;如下&#xff0…...

【更新至2022年】2000-2022年全国31省市以2000年为基期的实际GDP、名义GDP、GDP平减指数数据(含原始数据+计算过程+计算结果)

2000-2022年31省市名义GDP 实际GDP GDP平减指数 1、时间&#xff1a;2000-2022 2、范围&#xff1a;31省市 3、来源&#xff1a;GJ统计J和统计NJ 4、指标&#xff1a;名义GDP、地区生产总值指数&#xff08;上年100&#xff09;、实际GDP&#xff08;以2000年为基期&#x…...

【LeetCode】剑指 Offer <二刷>(5)

目录 题目&#xff1a;剑指 Offer 10- II. 青蛙跳台阶问题 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 11. 旋转数组的最小数字 - 力…...

rtsp 拉流 gb28181 收流 经AI 算法 再生成 rtsp server (一)

1、 rtsp 工具 1 vlc 必备工具 2 wireshark 必备工具 3 自己制作的工具 player 使用tcp 拉流&#xff0c;不自己写的话&#xff0c;使用ffmpeg 去写一个播放器就行 4 live555 编译好live555&#xff0c; 将live555的参数修改以下&#xff0c;主要是缓存大小 文章使用c 来写一…...

Jmeter系列-环境部署、详细介绍、安装目录介绍(1)

环境部署 官网下载Jmeter http://jmeter.apache.org/下载最新版本的 JMeter&#xff0c;解压文件到任意目录 安装JDK&#xff0c;配置Java环境 1、下载&#xff08;注意选择操作系统对应的位数32/64&#xff09; 官网 &#xff1a;http://www.oracle.com 2、安装&#xff0…...

更换 yum 阿里源 - 手把手教你怎么配置,在也不需要求别人了 - 看懂一个就相当于看懂了其他的linux系统

更换阿里源 我的是centos8 当然 centos7 也可以换 后面有更详细的怎么配 &#xff0c;再也不用求别人怎么弄了 最直接的方式 直接复制 执行 centos7 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo或者 wget -O /etc/yum.repos.…...