当前位置:   article > 正文

微信小程序实例代码解读_微信小程序 产品列表代码

微信小程序 产品列表代码

以微信 小程序开发工具给的示例代码为例:

主页代码:

index.wxml

这个文件是一个微信小程序页面的 WXML 结构,主要功能是展示一个快速开始教程的步骤和内容。

源代码:

  1. <!--index.wxml-->
  2. <view class="container">
  3. <view class="main">
  4. <view class="title font_title_1">快速开始</view>
  5. <view class="sub_title">
  6. 欢迎使用云开发!本页将带你了解如何使用云开发提供的能力快速开发小程序。
  7. </view>
  8. <view class="ability_container">
  9. <view class="ability_title">你将学习到</view>
  10. <view class="ability_item" wx:for="{{ knowledgePoints }}" wx:for-item="point" wx:key="id">
  11. {{ point.title }}
  12. </view>
  13. </view>
  14. <view class="title font_title_2">5分钟上手教程</view>
  15. <view class="sub_title">
  16. 我们将会使用常用的云开发能力,快速实现一个简单的商品列表页面。无需购买服务器,即可快速开发出后台服务、读取数据库、存取文件、调用微信开放服务。页面最终效果如下图所示。
  17. </view>
  18. <view class="image_container">
  19. <image src="../../images/list-database.png" mode="widthFix" />
  20. </view>
  21. <view class="btn-view-demo-page with-margin" bind:tap="gotoGoodsListPage">查看页面</view>
  22. <view class="seperator" />
  23. <view class="step_container" wx:for="{{ steps }}" wx:key="id" wx:for-item="step">
  24. <view id="step_{{ step.id }}" data-step="{{ step.id }}" class="step_title">
  25. <view class="step_id_container">
  26. <view class="step_id_mark">NO.</view>
  27. <view class="step_id_content">0{{ step.id }}</view>
  28. </view>
  29. <view class="font_title_2">{{ step.title }}</view>
  30. </view>
  31. <view class="step_content">
  32. <block wx:for="{{ step.contents }}" wx:for-item="item" wx:key="index">
  33. <view wx:if="{{ item.type === 'text' }}" class="text_zone">
  34. <rich-text nodes="<p style='line-height: 26px;'>{{ item.content }}</p>" />
  35. </view>
  36. <view wx:if="{{ item.type === 'code' }}" class="code_zone">
  37. <image class="btn-copy" data-code="{{ item.content }}" bind:tap="copyCode" src="../../images/icons/copy.png" />
  38. <rich-text nodes="<pre style='overflow: scroll;'>{{ item.content }}</pre>" />
  39. </view>
  40. <view wx:if="{{ item.type === 'image' }}" class="image_zone">
  41. <image src="../../images/{{ item.content }}" mode="widthFix" />
  42. </view>
  43. </block>
  44. </view>
  45. <view wx:if="{{ step.showJumpButton }}" class="btn-view-demo-page" bind:tap="gotoGoodsListPage">查看页面</view>
  46. <view class="seperator" />
  47. </view>
  48. <view class="bottom-tip">
  49. 至此,我们完成了一个带分享功能的小程序,利用了云开发的云函数、云数据库、云存储等能力,无需服务器即可快速完成较为复杂的功能。
  50. </view>
  51. <view class="bottom-tip">此外,云开发还提供了云模板、云后台、云托管等更多高级能力,可点击下方按钮前往查看。</view>
  52. <view class="button" bind:tap="discoverCloud">探索云开发更多功能</view>
  53. </view>
  54. </view>

1、<view class="container">创建一个容器视图,用于包裹整个页面内容。

2、<view class="main">:创建一个主要内容区域的视图。

3、<view class="title font_title_1">快速开始</view>一个只包含“快速开始”的视图

4、<view class="sub_title">

      欢迎使用云开发!本页将带你了解如何使用云开发提供的能力快速开发小程序。

    </view>

一个包含文本的视图

5、<view class="ability_container">   创建一个容器视图,用于展示知识点列表。

6、<view class="ability_title">你将学习到</view>   创建一个容器视图,用于展示知识点列表。

7、<view class="ability_item" wx:for="{{ knowledgePoints }}" wx:for-item="point" wx:key="id">   使用 wx:for 指令循环渲染知识点列表,每个知识点使用 ability_item 类样式。

8、{{ point.title }}标题类型

9、<view class="title font_title_2">5分钟上手教程</view>   创建一个容器视图,文本标题“5分钟上手教程”

10、<view class="sub_title">

      我们将会使用常用的云开发能力,快速实现一个简单的商品列表页面。无需购买服务器,即可快速开发出后台服务、读取数据库、存取文件、调用微信开放服务。页面最终效果如下图所示。

    </view>

文本容器视图,用于呈现文本

11、<view class="image_container">

      <image src="../../images/list-database.png" mode="widthFix" />

    </view>

容器视图,用于呈现图片

12、<view class="btn-view-demo-page with-margin" bind:tap="gotoGoodsListPage">查看页面</view>

容器视图,呈现按钮,链接到goodslist的page界面

13、<view class="step_container" wx:for="{{ steps }}" wx:key="id" wx:for-item="step">  容器视图,使用 wx:for 指令循环渲染步骤列表、展示步骤标题。

14、<view id="step_{{ step.id }}" data-step="{{ step.id }}" class="step_title">  容器视图,每个id对应不同步骤的区域

15、<view class="step_id_container">

          <view class="step_id_mark">NO.</view>

          <view class="step_id_content">0{{ step.id }}</view>

        </view>

每个区域的标题部分

16、<view class="font_title_2">{{ step.title }}</view>  容器视图,对应每部分的标题:

17、

  1. <view class="step_content">
  2. <block wx:for="{{ step.contents }}" wx:for-item="item" wx:key="index">
  3. <view wx:if="{{ item.type === 'text' }}" class="text_zone">
  4. <rich-text nodes="<p style='line-height: 26px;'>{{ item.content }}</p>" />
  5. </view>
  6. <view wx:if="{{ item.type === 'code' }}" class="code_zone">
  7. <image class="btn-copy" data-code="{{ item.content }}" bind:tap="copyCode" src="../../images/icons/copy.png" />
  8. <rich-text nodes="<pre style='overflow: scroll;'>{{ item.content }}</pre>" />
  9. </view>
  10. <view wx:if="{{ item.type === 'image' }}" class="image_zone">
  11. <image src="../../images/{{ item.content }}" mode="widthFix" />
  12. </view>
  13. </block>
  14. </view>

不同部分的代码部分,用于展示不同步骤的内容

18、<view wx:if="{{ step.showJumpButton }}" class="btn-view-demo-page" bind:tap="gotoGoodsListPage">查看页面</view>

      <view class="seperator" />

视图内容,按钮链接,对应最终的页面内容

19、<view class="bottom-tip">

      至此,我们完成了一个带分享功能的小程序,利用了云开发的云函数、云数据库、云存储等能力,无需服务器即可快速完成较为复杂的功能。

    </view>

    <view  class="bottom-tip">此外,云开发还提供了云模板、云后台、云托管等更多高级能力,可点击下方按钮前往查看。</view>

文本内容

20、<view class="button" bind:tap="discoverCloud">探索云开发更多功能</view>  链接对应其他页面

constants.js

  1. /**
  2. * 快速开始教程知识点
  3. */
  4. const QuickStartPoints = [
  5. { id: '1', title: '无需搭建服务器,快速构建小程序' },
  6. { id: '2', title: '免登录、免鉴权调用微信开放服务' },
  7. ];
  8. function highlightText(content) {
  9. return `<span> \`${content}\` </span>`;
  10. }
  11. /**
  12. * 快速开始教程步骤
  13. */
  14. const QuickStartSteps = [
  15. {
  16. id: '1',
  17. title: '创建列表页面并初始化数据',
  18. contents: [
  19. {
  20. type: 'text',
  21. content: `编辑教程内置的页面${highlightText('miniprogram/pages/goods-list/index.js')},在${highlightText('Page')}的${highlightText('data')}配置项中添加初始化数据${highlightText('goodsList')},代码如下所示。该页面将用于展示商品列表。`,
  22. },
  23. {
  24. type: 'code',
  25. content: `
  26. Page({
  27. data: {
  28. goodsList: [{
  29. _id: '1',
  30. title: '商品1',
  31. price: 1,
  32. }],
  33. },
  34. })
  35. `,
  36. },
  37. {
  38. type: 'text',
  39. content: '保存文件,查看页面,可以看到列表渲染出初始数据。',
  40. },
  41. {
  42. type: 'image',
  43. content: 'list-init.png',
  44. }
  45. ],
  46. showJumpButton: true,
  47. },
  48. {
  49. id: '2',
  50. title: '实现并部署一个后台接口',
  51. contents: [
  52. {
  53. type: 'text',
  54. content: `编辑教程内置的后台接口文件${highlightText('cloudfunctions/quickstartFunctions/fetchGoodsList/index.js')},使用下面代码覆盖文件内容,返回一些模拟的商品列表数据。`,
  55. },
  56. {
  57. type: 'code',
  58. content: `
  59. const cloud = require('wx-server-sdk');
  60. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  61. exports.main = async (event, context) => {
  62. return {
  63. dataList: [
  64. { _id: '1', title: '微信气泡徽章', price: 1800 },
  65. { _id: '2', title: '微信地球鼠标垫', price: 5800 },
  66. { _id: '3', title: '微信黄脸大贴纸', price: 500 }
  67. ],
  68. }
  69. };
  70. `
  71. },
  72. {
  73. type: 'text',
  74. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,等待进度完成,即完成后端接口的开发与部署。`,
  75. },
  76. {
  77. type: 'image',
  78. content: 'function_deploy.png',
  79. },
  80. {
  81. type: 'text',
  82. content: `注:新用户部署时会提示创建云开发环境。<span style="color: red;">新用户可免费开通云开发环境并试用。</span>`,
  83. },
  84. {
  85. type: 'image',
  86. content: 'create_env.png',
  87. },
  88. {
  89. type: 'text',
  90. content: `新用户开通环境后在${highlightText('cloudfunctions')}目录右键,选择当前环境为新建的环境。`,
  91. },
  92. {
  93. type: 'image',
  94. content: 'env-select.png',
  95. },
  96. ],
  97. showJumpButton: false,
  98. },
  99. {
  100. id: '3',
  101. title: '小程序端调用后台接口',
  102. contents: [
  103. {
  104. type: 'text',
  105. content: `编辑列表页${highlightText('miniprogram/pages/goods-list/index.js')},在 Page 下新增一个方法${highlightText('fetchGoodsList')},用于调用后端接口,并在 Page 的${highlightText('onLoad')}生命周期调用该方法:`,
  106. },
  107. {
  108. type: 'code',
  109. content: `
  110. async fetchGoodsList() {
  111. this.setData({ isLoading: true });
  112. const res = await wx.cloud.callFunction({
  113. name: 'quickstartFunctions',
  114. data: { type: 'fetchGoodsList' },
  115. });
  116. const goodsList = res?.result?.dataList || [];
  117. this.setData({
  118. isLoading: false,
  119. goodsList
  120. });
  121. },
  122. `
  123. },
  124. {
  125. type: 'code',
  126. content: `
  127. onLoad() {
  128. this.fetchGoodsList();
  129. },
  130. `,
  131. },
  132. {
  133. type: 'text',
  134. content: `保存文件后,查看列表页,可以看到调用后台接口获取到了模拟数据并正确显示。`,
  135. },
  136. {
  137. type: 'image',
  138. content: 'list-scf.png',
  139. }
  140. ],
  141. showJumpButton: true,
  142. },
  143. {
  144. id: '4',
  145. title: '从数据库中读取真实数据',
  146. contents: [
  147. {
  148. type: 'text',
  149. content: '前面步骤中,后台接口返回的是模拟数据,实际开发中,我们需要利用数据库实现持久存储,下面我们来通过云开发数据库能力实现这个效果。',
  150. },
  151. {
  152. type: 'text',
  153. content: `点击开发者工具顶部的【云开发】按钮,打开云开发控制台,选中【数据库】,新增一个商品集合命名${highlightText('goods')},并添加若干条记录。注:本示例中,集合中的记录请保证具有${highlightText('title')}和${highlightText('price')}字段。`,
  154. },
  155. {
  156. type: 'image',
  157. content: 'scf-enter.png',
  158. },
  159. {
  160. type: 'image',
  161. content: 'database_add.png',
  162. },
  163. {
  164. type: 'text',
  165. content: `编辑后台接口代码${highlightText('cloudfunctions/quickstartFunctions/fetchGoodsList/index.js')},用下面代码覆盖文件内容,用于读取数据库中数据:`,
  166. },
  167. {
  168. type: 'code',
  169. content: `
  170. const cloud = require('wx-server-sdk');
  171. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  172. const db = cloud.database();
  173. exports.main = async (event, context) => {
  174. const result = await db.collection('goods')
  175. .skip(0)
  176. .limit(10)
  177. .get();
  178. return {
  179. dataList: result?.data,
  180. };
  181. };
  182. `,
  183. },
  184. {
  185. type: 'text',
  186. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,重新部署后台接口。`,
  187. },
  188. {
  189. type: 'text',
  190. content: '查看页面,可以看到正确获取数据库中的数据并显示在列表中。',
  191. },
  192. {
  193. type: 'image',
  194. content: 'list-database.png',
  195. }
  196. ],
  197. showJumpButton: true,
  198. },
  199. {
  200. id: '5',
  201. title: '调用开放接口生成小程序码',
  202. contents: [
  203. {
  204. type: 'text',
  205. content: '实际小程序开发中,我们通常会对小程序进行传播分享。下面我们利用免鉴权的云调用能力实现小程序码。',
  206. },
  207. {
  208. type: 'text',
  209. content: `编辑教程内置的接口文件${highlightText('cloudfunctions/quickstartFunctions/genMpQrcode/index.js')},用以下代码覆盖文件内容。该接口用于生成小程序码图片并上传到云存储保存。`,
  210. },
  211. {
  212. type: 'code',
  213. content: `
  214. const cloud = require('wx-server-sdk');
  215. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  216. exports.main = async (event, context) => {
  217. const pagePath = event.pagePath;
  218. // 获取小程序二维码的buffer
  219. const resp = await cloud.openapi.wxacode.get({
  220. path: pagePath,
  221. });
  222. const { buffer } = resp;
  223. // 将图片上传云存储空间
  224. const upload = await cloud.uploadFile({
  225. cloudPath: String(pagePath).replaceAll('/', '_') + '.png',
  226. fileContent: buffer
  227. });
  228. return upload.fileID;
  229. };
  230. `,
  231. },
  232. {
  233. type: 'text',
  234. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,部署该接口。`,
  235. },
  236. {
  237. type: 'text',
  238. content: `编辑商品列表页${highlightText('miniprogram/pages/goods-list/index.js')},在 Page 配置中新增一个方法${highlightText('generateMPCode')},用于调用接口获取小程序码:`,
  239. },
  240. {
  241. type: 'code',
  242. content: `
  243. async generateMPCode() {
  244. wx.showLoading();
  245. const resp = await wx.cloud.callFunction({
  246. name: 'quickstartFunctions',
  247. data: {
  248. type: 'genMpQrcode',
  249. pagePath: 'pages/goods-list/index',
  250. }
  251. });
  252. this.setData({ codeModalVisible: true, codeImageSrc: resp?.result });
  253. wx.hideLoading();
  254. },
  255. `
  256. },
  257. {
  258. type: 'text',
  259. content: `保存文件后,在商品列表页点击【分享】按钮,会调用${highlightText('generateMPCode')}方法获取小程序码并弹框显示。`,
  260. },
  261. {
  262. type: 'image',
  263. content: 'list-share.png',
  264. }
  265. ],
  266. showJumpButton: true,
  267. },
  268. ];
  269. module.exports = {
  270. QuickStartPoints,
  271. QuickStartSteps,
  272. }

这个文件定义了快速开始教程的知识点列表和步骤列表的数据结构,以及一个用于高亮显示文本的辅助函数。其他文件可以通过引入这个文件来获取这些数据,用于渲染页面内容。

1、const QuickStartPoints = [

  { id: '1', title: '无需搭建服务器,快速构建小程序' },

  { id: '2', title: '免登录、免鉴权调用微信开放服务' },

];

学习内容部分的文档,及对应的id、title

2、function highlightText(content) {

  return `<span> \`${content}\` </span>`;

}

高亮文本的方法,供后续调用

3、

  1. const QuickStartSteps = [
  2. {
  3. id: '1',
  4. title: '创建列表页面并初始化数据',
  5. contents: [
  6. {
  7. type: 'text',
  8. content: `编辑教程内置的页面${highlightText('miniprogram/pages/goods-list/index.js')},在${highlightText('Page')}的${highlightText('data')}配置项中添加初始化数据${highlightText('goodsList')},代码如下所示。该页面将用于展示商品列表。`,
  9. },
  10. {
  11. type: 'code',
  12. content: `
  13. Page({
  14. data: {
  15. goodsList: [{
  16. _id: '1',
  17. title: '商品1',
  18. price: 1,
  19. }],
  20. },
  21. })
  22. `,
  23. },
  24. {
  25. type: 'text',
  26. content: '保存文件,查看页面,可以看到列表渲染出初始数据。',
  27. },
  28. {
  29. type: 'image',
  30. content: 'list-init.png',
  31. }
  32. ],
  33. showJumpButton: true,
  34. },
  35. {
  36. id: '2',
  37. title: '实现并部署一个后台接口',
  38. contents: [
  39. {
  40. type: 'text',
  41. content: `编辑教程内置的后台接口文件${highlightText('cloudfunctions/quickstartFunctions/fetchGoodsList/index.js')},使用下面代码覆盖文件内容,返回一些模拟的商品列表数据。`,
  42. },
  43. {
  44. type: 'code',
  45. content: `
  46. const cloud = require('wx-server-sdk');
  47. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  48. exports.main = async (event, context) => {
  49. return {
  50. dataList: [
  51. { _id: '1', title: '微信气泡徽章', price: 1800 },
  52. { _id: '2', title: '微信地球鼠标垫', price: 5800 },
  53. { _id: '3', title: '微信黄脸大贴纸', price: 500 }
  54. ],
  55. }
  56. };
  57. `
  58. },
  59. {
  60. type: 'text',
  61. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,等待进度完成,即完成后端接口的开发与部署。`,
  62. },
  63. {
  64. type: 'image',
  65. content: 'function_deploy.png',
  66. },
  67. {
  68. type: 'text',
  69. content: `注:新用户部署时会提示创建云开发环境。<span style="color: red;">新用户可免费开通云开发环境并试用。</span>`,
  70. },
  71. {
  72. type: 'image',
  73. content: 'create_env.png',
  74. },
  75. {
  76. type: 'text',
  77. content: `新用户开通环境后在${highlightText('cloudfunctions')}目录右键,选择当前环境为新建的环境。`,
  78. },
  79. {
  80. type: 'image',
  81. content: 'env-select.png',
  82. },
  83. ],
  84. showJumpButton: false,
  85. },
  86. {
  87. id: '3',
  88. title: '小程序端调用后台接口',
  89. contents: [
  90. {
  91. type: 'text',
  92. content: `编辑列表页${highlightText('miniprogram/pages/goods-list/index.js')},在 Page 下新增一个方法${highlightText('fetchGoodsList')},用于调用后端接口,并在 Page 的${highlightText('onLoad')}生命周期调用该方法:`,
  93. },
  94. {
  95. type: 'code',
  96. content: `
  97. async fetchGoodsList() {
  98. this.setData({ isLoading: true });
  99. const res = await wx.cloud.callFunction({
  100. name: 'quickstartFunctions',
  101. data: { type: 'fetchGoodsList' },
  102. });
  103. const goodsList = res?.result?.dataList || [];
  104. this.setData({
  105. isLoading: false,
  106. goodsList
  107. });
  108. },
  109. `
  110. },
  111. {
  112. type: 'code',
  113. content: `
  114. onLoad() {
  115. this.fetchGoodsList();
  116. },
  117. `,
  118. },
  119. {
  120. type: 'text',
  121. content: `保存文件后,查看列表页,可以看到调用后台接口获取到了模拟数据并正确显示。`,
  122. },
  123. {
  124. type: 'image',
  125. content: 'list-scf.png',
  126. }
  127. ],
  128. showJumpButton: true,
  129. },
  130. {
  131. id: '4',
  132. title: '从数据库中读取真实数据',
  133. contents: [
  134. {
  135. type: 'text',
  136. content: '前面步骤中,后台接口返回的是模拟数据,实际开发中,我们需要利用数据库实现持久存储,下面我们来通过云开发数据库能力实现这个效果。',
  137. },
  138. {
  139. type: 'text',
  140. content: `点击开发者工具顶部的【云开发】按钮,打开云开发控制台,选中【数据库】,新增一个商品集合命名${highlightText('goods')},并添加若干条记录。注:本示例中,集合中的记录请保证具有${highlightText('title')}和${highlightText('price')}字段。`,
  141. },
  142. {
  143. type: 'image',
  144. content: 'scf-enter.png',
  145. },
  146. {
  147. type: 'image',
  148. content: 'database_add.png',
  149. },
  150. {
  151. type: 'text',
  152. content: `编辑后台接口代码${highlightText('cloudfunctions/quickstartFunctions/fetchGoodsList/index.js')},用下面代码覆盖文件内容,用于读取数据库中数据:`,
  153. },
  154. {
  155. type: 'code',
  156. content: `
  157. const cloud = require('wx-server-sdk');
  158. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  159. const db = cloud.database();
  160. exports.main = async (event, context) => {
  161. const result = await db.collection('goods')
  162. .skip(0)
  163. .limit(10)
  164. .get();
  165. return {
  166. dataList: result?.data,
  167. };
  168. };
  169. `,
  170. },
  171. {
  172. type: 'text',
  173. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,重新部署后台接口。`,
  174. },
  175. {
  176. type: 'text',
  177. content: '查看页面,可以看到正确获取数据库中的数据并显示在列表中。',
  178. },
  179. {
  180. type: 'image',
  181. content: 'list-database.png',
  182. }
  183. ],
  184. showJumpButton: true,
  185. },
  186. {
  187. id: '5',
  188. title: '调用开放接口生成小程序码',
  189. contents: [
  190. {
  191. type: 'text',
  192. content: '实际小程序开发中,我们通常会对小程序进行传播分享。下面我们利用免鉴权的云调用能力实现小程序码。',
  193. },
  194. {
  195. type: 'text',
  196. content: `编辑教程内置的接口文件${highlightText('cloudfunctions/quickstartFunctions/genMpQrcode/index.js')},用以下代码覆盖文件内容。该接口用于生成小程序码图片并上传到云存储保存。`,
  197. },
  198. {
  199. type: 'code',
  200. content: `
  201. const cloud = require('wx-server-sdk');
  202. cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
  203. exports.main = async (event, context) => {
  204. const pagePath = event.pagePath;
  205. // 获取小程序二维码的buffer
  206. const resp = await cloud.openapi.wxacode.get({
  207. path: pagePath,
  208. });
  209. const { buffer } = resp;
  210. // 将图片上传云存储空间
  211. const upload = await cloud.uploadFile({
  212. cloudPath: String(pagePath).replaceAll('/', '_') + '.png',
  213. fileContent: buffer
  214. });
  215. return upload.fileID;
  216. };
  217. `,
  218. },
  219. {
  220. type: 'text',
  221. content: `保存文件后,在${highlightText('cloudfunctions/quickstartFunctions')}目录右键,选择【上传并部署-云端安装依赖】,部署该接口。`,
  222. },
  223. {
  224. type: 'text',
  225. content: `编辑商品列表页${highlightText('miniprogram/pages/goods-list/index.js')},在 Page 配置中新增一个方法${highlightText('generateMPCode')},用于调用接口获取小程序码:`,
  226. },
  227. {
  228. type: 'code',
  229. content: `
  230. async generateMPCode() {
  231. wx.showLoading();
  232. const resp = await wx.cloud.callFunction({
  233. name: 'quickstartFunctions',
  234. data: {
  235. type: 'genMpQrcode',
  236. pagePath: 'pages/goods-list/index',
  237. }
  238. });
  239. this.setData({ codeModalVisible: true, codeImageSrc: resp?.result });
  240. wx.hideLoading();
  241. },
  242. `
  243. },
  244. {
  245. type: 'text',
  246. content: `保存文件后,在商品列表页点击【分享】按钮,会调用${highlightText('generateMPCode')}方法获取小程序码并弹框显示。`,
  247. },
  248. {
  249. type: 'image',
  250. content: 'list-share.png',
  251. }
  252. ],
  253. showJumpButton: true,
  254. },
  255. ];

文本、代码、id等内容,是在index.wxml中各步骤的内容,可以调用。

3、module.exports = {

  QuickStartPoints,

  QuickStartSteps,

}

导出 QuickStartPoints 和 QuickStartSteps 两个常量,供其他文件引用。

index.js

这个文件主要定义了页面的初始数据、事件处理函数和页面跳转函数,用于实现快速开始教程的交互逻辑。

  1. const { envList } = require("../../envList");
  2. const { QuickStartPoints, QuickStartSteps } = require("./constants");
  3. Page({
  4. data: {
  5. knowledgePoints: QuickStartPoints,
  6. steps: QuickStartSteps,
  7. },
  8. copyCode(e) {
  9. const code = e.target?.dataset?.code || '';
  10. wx.setClipboardData({
  11. data: code,
  12. success: () => {
  13. wx.showToast({
  14. title: '已复制',
  15. })
  16. },
  17. fail: (err) => {
  18. console.error('复制失败-----', err);
  19. }
  20. })
  21. },
  22. discoverCloud() {
  23. wx.switchTab({
  24. url: '/pages/examples/index',
  25. })
  26. },
  27. gotoGoodsListPage() {
  28. wx.navigateTo({
  29. url: '/pages/goods-list/index',
  30. })
  31. },
  32. });

1、const { envList } = require("../../envList");  引入环境配置文件,用于获取当前环境的相关信息。

2、const { QuickStartPoints, QuickStartSteps } = require("./constants");  引入常量文件,用于获取快速开始教程的知识点和步骤数据。

3、data: {

    knowledgePoints: QuickStartPoints,

    steps: QuickStartSteps,

  },  初始化页面的数据,包括知识点列表和步骤列表

4、copyCode(e) {...}:   定义一个事件处理函数,用于复制代码到剪贴板。

5、const code = e.target?.dataset?.code || '';  从事件对象中获取要复制的代码内容

6、wx.setClipboardData({。。。})  调用微信小程序API,将代码复制到剪贴板

7、success: () => {

        wx.showToast({

          title: '已复制',

        })

      },

      fail: (err) => {

        console.error('复制失败-----', err);

      }

如果复制成功,展示提示框;如果复制失败,打印错误日志。

8、discoverCloud() {

    wx.switchTab({

      url: '/pages/examples/index',

    })

  },

定义一个函数,用于跳转到实例页面,函数内调用微信小程序API,切换到指定的标签页面

9、gotoGoodsListPage() {

    wx.navigateTo({

      url: '/pages/goods-list/index',

    })

  },

定义一个函数,用于跳转到实例页面,函数内调用微信小程序API,导航到指定的标签页面

index.wxss

这个文件定义了页面的布局、字体、颜色等,与wxml结构文件和JavaScript逻辑文件配合,构成一个完整的微信小程序页面

  1. /**index.wxss**/
  2. page {
  3. /* padding-top: 54rpx; */
  4. padding-bottom: 60rpx;
  5. background-color: #fff;
  6. }
  7. .container {
  8. width: 100%;
  9. height: 100%;
  10. align-items: center;
  11. }
  12. .main {
  13. width: 90%;
  14. display: flex;
  15. flex-direction: column;
  16. font-family: PingFang SC;
  17. }
  18. .image_container {
  19. margin-top: 48rpx;
  20. display: flex;
  21. justify-content: center;
  22. }
  23. .title {
  24. margin-bottom: 20rpx;
  25. margin-top: 40rpx;
  26. }
  27. .sub_title {
  28. font-size: 28rpx;
  29. color: rgba(0, 0, 0, 0.6);
  30. line-height: 52rpx;
  31. }
  32. /* 一级标题字体 */
  33. .font_title_1 {
  34. font-weight: 500;
  35. color: #000;
  36. font-size: 48rpx;
  37. }
  38. /* 二级标题字体 */
  39. .font_title_2 {
  40. color: #000;
  41. font-size: 32rpx;
  42. font-weight: 500;
  43. font-family: "PingFang SC";
  44. }
  45. /* 内容字体 */
  46. .font_content {
  47. font-size: 32rpx;
  48. color: rgba(0, 0, 0, 0.6);
  49. line-height: 52rpx;
  50. }
  51. .seperator {
  52. border-top: 2rpx solid #dcdcdc;
  53. margin-top: 60rpx;
  54. margin-bottom: 60rpx;
  55. }
  56. .ability_container {
  57. border: 2rpx solid #e5e5e5;
  58. padding: 48rpx;
  59. box-sizing: border-box;
  60. border-radius: 20rpx;
  61. background-color: #f5f5f5;
  62. display: flex;
  63. flex-direction: column;
  64. gap: 16rpx;
  65. box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
  66. margin-top: 48rpx;
  67. }
  68. .ability_title {
  69. font-size: 36rpx;
  70. font-weight: 500;
  71. color: #000;
  72. }
  73. .ability_item {
  74. color: rgba(0, 0, 0, 0.6);
  75. font-size: 28rpx;
  76. }
  77. .ability_item::before {
  78. content: "";
  79. display: inline-block;
  80. width: 12rpx;
  81. height: 12rpx;
  82. border-radius: 50%;
  83. background-color: rgba(0, 0, 0, 0.6);
  84. margin-right: 12rpx;
  85. }
  86. .step_container {
  87. box-sizing: border-box;
  88. border-radius: 10rpx;
  89. display: flex;
  90. flex-direction: column;
  91. }
  92. .step_title,
  93. .step_content {
  94. padding: 8rpx;
  95. background-color: #fff;
  96. }
  97. .step_title {
  98. display: flex;
  99. align-items: center;
  100. gap: 16rpx;
  101. }
  102. .step_id_container {
  103. display: flex;
  104. font-size: 28rpx;
  105. align-items: center;
  106. height: 36rpx;
  107. line-height: 36rpx;
  108. font-weight: 400;
  109. }
  110. .step_id_mark {
  111. background-color: rgba(0, 0, 0, 0.5);
  112. border-radius: 2px 0px 0px 2px;
  113. color: #fff;
  114. height: 40rpx;
  115. line-height: 40rpx;
  116. width: 70rpx;
  117. text-align: center;
  118. }
  119. .step_id_content {
  120. width: 50rpx;
  121. text-align: center;
  122. background-color: #fff;
  123. color: rgba(0, 0, 0, 0.5);
  124. border: 1px solid rgba(0, 0, 0, 0.5);
  125. border-left: none;
  126. box-sizing: border-box;
  127. border-radius: 0px 2px 2px 0px;
  128. }
  129. .step_content {
  130. background-color: #fff;
  131. color: #666;
  132. font-size: 28rpx;
  133. word-break: break-all;
  134. }
  135. .text_zone {
  136. margin-top: 20rpx;
  137. margin-bottom: 48rpx;
  138. color: rgba(0, 0, 0, 0.6);
  139. }
  140. .code_zone {
  141. background-color: #0E190E;
  142. color: rgba(255, 255, 255, 0.7);
  143. border-radius: 12rpx;
  144. padding: 0rpx 32rpx;
  145. box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);
  146. position: relative;
  147. margin-bottom: 48rpx;
  148. }
  149. .image_zone {
  150. display: flex;
  151. justify-content: center;
  152. margin-bottom: 48rpx;
  153. }
  154. .btn-copy {
  155. border-radius: 12rpx;
  156. height: 40rpx;
  157. width: 40rpx;
  158. position: absolute;
  159. right: 20rpx;
  160. bottom: 20rpx;
  161. }
  162. .bottom-tip {
  163. margin-top: 10rpx;
  164. color: rgba(0, 0, 0, 0.9);
  165. font-size: 28rpx;
  166. line-height: 52rpx;
  167. }
  168. .button {
  169. width: 70%;
  170. text-align: center;
  171. margin: 40rpx auto 0 auto;
  172. color: white;
  173. border-radius: 5px;
  174. height: 80rpx;
  175. line-height: 80rpx;
  176. background-color: #07c160;
  177. }
  178. .btn-view-demo-page {
  179. width: 100%;
  180. text-align: center;
  181. color: white;
  182. border-radius: 5px;
  183. font-size: 26rpx;
  184. padding: 16rpx 0rpx;
  185. box-sizing: border-box;
  186. border: 1px solid #07c160;
  187. color: #07c160;
  188. font-size: 32rpx;
  189. }
  190. .with-margin {
  191. margin-top: 48rpx;
  192. }

1、/**index.wxss**/   这是一个CSS注释,标识该文件是index的样式文件

2、page {

  /* padding-top: 54rpx; */

  padding-bottom: 60rpx;

  background-color: #fff;

}

选择器,定义了整个页面的样式,页面底部内边距为60rpx,北京颜色为白色。

3、.container {

  width: 100%;

  height: 100%;

  align-items: center;

}

选择器,定义了页面容器的样式,宽度和高度占满了整个页面,且子元素在容器内水平居中位置。

4、.main {

  width: 90%;

  display: flex;

  flex-direction: column;

  font-family: PingFang SC;

}

选择器,定义了主要内容区域的样式,宽度占90%,flex布局,子元素垂直排列,字体为PingFang SC

5、.image_container {

  margin-top: 48rpx;

  display: flex;

  justify-content: center;

}

选择器,定义了图片区域的样式,头部内边距为60rpx,flex布局,居中。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号