从零开始三天学会微信小程序开发(三)

news2024/10/6 2:25:42

看到不少入门的小程序开发者不断的问重复性的问题,我们从实战角度开发了这个课程,希望能够帮助大家了解小程序开发。

课程分三天:

  • 第一天:微信小程序开发入门
  • 第二天:给小程序接入云端数据
  • 第三天:完善我的小程序

第三天:完善我的小程序

(一)如何在页面之间传递参数

1. 传递参数

我们已经实现了首页到内容页面之间的跳转,但并没有区分到底是从哪个分类跳转过去的。为此,我们还需要从index页面传递分类名到detail页面。

修改index.wxml文件中的navigator组件代码如下:

<navigator style="border-color: {{link.color}};" class="btn" url="/pages/detail/detail?name={{link.name}}" wx:for="{{columnlinks}}" wx:for-item="link">{{link.name}}</navigator>

即,在原来的url尾部加上了“?name={{link.name}”。

2. 接收参数

回到detail.js文件,修改onLoad方法如下:

 onLoad(options) {
    this.setData({
      name:options.name
    })
  },

options对象会存放从上一个页面传递过来的参数,在这里options.name就是index页面传递过来的分类名,我们通过this.setData()方法把它绑定到name这个变量中去。

现在你在detail.wxml文件中加上{{name}},可以看到分类名成功地传递过来了。

(二)获取一条评语内容

从Comment评语内容表的设计和数据添加我们可以看到,每个分类下都有很多的评语,而我们这个小程序每次只需要显示其中一个。所以,我们需要编写一个从Comment表指定分类中获取一条记录的代码。

  • 首先,在detail.js的数据初始化代码中定义一个index变量,初始值为0,表示要获取的那条数据在Comment表指定分类中属于第几条。代码如下:
data: {
    index:0
  },
  • 接着,在onLoad()方法中编写如下的代码:
onLoad(options) {
    this.setData({
      name:options.name,
      content:''
    })

    const query = wx.Bmob.Query("Comment");
    query.equalTo("categoryname","==",this.data.name);
    query.skip(this.data.index)
    query.limit(1)
    query.find().then(res => {
      this.setData({
        content:res[0].content,
        index:this.data.index + 1

      });
    })
  },

这里需要说明几点:

  1. query.equalTo方法是Bmob SDK提供的条件查询方法。在这个例子中,我们要查询的条件是categoryname字段的值等于this.data.name(传递过来的分类名)的值。注意:这里用的是==号,而不是=号。

  2. query.skip(m)和query.limit(n)方法经常配合一起使用,skip方法表示跳过前面m条数据,limit方法表示最多获取n条数据。

  3. this.setData绑定数据的时候别忘记了index:this.data.index+1,表示我们接下来要获取的是下一条数据。

现在,数据已经获取到了,我们还要把它呈现在界面中。修改detail.wxml文件,代码如下:

<textarea value="{{content}}" class="txt"></textarea>
<view class="row-btn">
  <button class="bt">换一个</button>
  <button class="bt">复制</button>
  <button class="bt">分享</button>
</view>

修改dtail.wxss文件,给组件添加样式,代码如下:

page{
  padding: 20rpx;
}
.txt{
  width: 95%;
  height: 30vh;
  border-radius: 16rpx ;
  background: rgb(240, 240, 240);
  box-sizing: border-box;
  padding: 20rpx;
}
.row-btn{
  display: flex;
  justify-content:space-between;
  margin-top: 20rpx;
  margin-right: 20rpx;
}
.bt{
  color: white;
  width: 100px !important;
  background-color: green;
  margin-right: 10rpx;
}

这里需要了解的是,page样式是针对整个页面的。比如,这里通过padding: 20rpx控制页面内部的组件离边框20rpx。

完成后预览的效果如下:

52.png

(三)封装成一个方法

现在,点击“换一个”按钮,textarea的内容并不会有任何变化,我们还需要给这个按钮添加点击事件。

打开detail.js文件,添加getContent()方法,并在onLoad()方法中用this.getContent()调用这个方法。代码如下:

onLoad(options) {
    this.setData({
      name:options.name,
      content:''
    })
    this.getContent();
  },

  getContent(){
    const query = wx.Bmob.Query("Comment");
    query.equalTo("categoryname","==",this.data.name);
    query.skip(this.data.index);
    query.limit(1);
    query.find().then(res => {
      this.setData({
        content:res[0].content,
        index:this.data.index + 1
      });
    });
  },

这里需要说明的是:

  1. getContent()方法是我们自定义的方法,名称可以改变。

  2. getContent()方法可以放在detail.js文件里面和onLoad()、onReady()等方法同级的任何地方。

  3. 不要漏掉getContent(){ }, 这个方法最后的英文逗号。

(四)给“换一个”按钮绑定方法

现在,我们可以给“换一个”按钮绑定(bind:tap)刚写的getContent方法。修改detail.wxml文件如下:

<button class="bt" bind:tap="getContent">换一个</button>

现在点击“换一个”按钮,已经会不断切换评语内容。

(五)学会看调试器

我们点击多几次之后,会发现页面内容一直保持不变。

观察开发工具中的“调试器”,看到下面的错误提示信息:

53.png

这是因为我们已经翻看到这个分类下的最后一条记录了。为了解决这个问题,需要简单修改getContent()方法:

getContent(){
    const query = wx.Bmob.Query("Comment");
    query.equalTo("categoryname","==",this.data.name);
    query.skip(this.data.index);
    query.limit(1);
    query.find().then(res => {
      if(res.length<=0){
        this.setData({
          index:0
        })
        this.getContent()
      }
      else{
        this.setData({
          content:res[0].content,
          index:this.data.index + 1
        });
      }
    });
  },

即,查询结果回来之后,我们先判断这个结果是否有内容。如果没有的话,设置index为0,并再次获取。

为了让界面效果更具有动感,我们还可以和之前一样,在请求时加上wx.showLoading()和wx.hideLoading()方法。这个自行尝试添加。

(六)实现更多的功能(复制、分享和客服)

为了实现复制的功能,我们像上面一样,添加一个copy()方法,代码如下:

opy(){
    wx.setClipboardData({
      data: this.data.content,
    })
  },

这个代码很容易理解,即把this.data.content的内容复制到剪切板中去。

我们再把copy()方法绑定到“复制”按钮中去:

<button class="bt" bind:tap="copy">复制</button>

完成之后,预览效果如下:

54.png

小程序还内置了其他的方法,让我们不需要编写额外的代码,下面我们给“分享”按钮绑定内置的分享功能:

<button class="bt" open-type="share">分享</button>

预览效果如下:

55.png

联系“客服”的事件和分享的事件类似,代码如下:

<button open-type="contact" class="bt">客服</button>

(七)如何选择小程序的开发主题

开发并不难,只要你肯耐心点,花时间按这个课程的步骤一步一步去实践,很快就会掌握小程序开发的经验。

等你掌握好小程序开发技术,可能会更让你困惑的是:我应该选择什么样的开发主题?中国人口那么多,为什么我开发出来的应用没有人用?

这是因为我们开发产品前没有好好地进行调研。这里,我们推荐一个小程序:微信指数。

56.png

当你有一个好想法或者想给小程序取名的时候,建议打开这个小程序,查看和你想法相关的各种关键词对应的指数热度。如果指数热度很低,那你就要好好审视你这个想法或者名字到底是不是一个好的创意,好的名字。在一个很多鱼的大池塘里面钓鱼,虽然钓的人多,但机会也更多。在一个连小鱼小虾都没有几个的野池塘,虽然没有什么人来竞争,但你也很难钓到鱼。

我们的课程到此为止,有任何问题欢迎大家一起交流技术(wechat: xiaowon12),享受写程序的乐趣。

源码请查看:https://gitee.com/zhang-ming-123/threedaystudyminiprogram

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

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

相关文章

STM32——使用TIM输出比较产生PWM波形控制舵机转角

一、输出比较简介&#xff1a; 只有高级定时器和通用寄存器才有输入捕获/输出比较电路&#xff0c;他们有四个CCR&#xff08;捕获/比较寄存器&#xff09;&#xff0c;共用一个CNT&#xff08;计数器&#xff09;&#xff0c;而输出比较功能是用来输出PWM波形的。 红圈部分…

【知识学习】Unity3D中Shader Graph的概念及使用方法示例

Unity3D中的Shader Graph是一个强大的可视化Shader编辑工具&#xff0c;它允许用户通过拖拽和连接节点的方式来创建Shader&#xff0c;而不是通过传统的编写代码的方式。Shader Graph使得Shader的创建过程更加直观和易于理解&#xff0c;特别是对于那些不熟悉Shader语言编程的美…

gitee配置ssh教程

生成公钥 执行命令&#xff1a; ssh-keygen -t rsa查看公钥 cat ~/.ssh/id_rsa.pub这个公钥就是要复制粘贴到Gitee中的ssh公钥。 配置Gitee SSH公钥 来到Gitee的ssh公钥中&#xff0c;配置

git通过命令方式push代码到远程

本地仓库和远程仓库关联操作 通过关联远程分支可以将本地的分支与远程仓库中的分支进行关联&#xff0c;从而实现本地分支与远程分支的同步和交互。 关联远程分支的步骤如下&#xff1a; 1. 首先&#xff0c;使用git remote -v命令查看当前仓库关联的远程仓库。 git remote …

C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏

前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏&#xff1a;SeeSharpSnake。 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏&#xff0c;每个配置生成的输出大小也不同。 项目源码运行 F5 运行 SeeSharpSnake项目&…

Python 面试【★★★★】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

安卓短视频去水印v1.7 简洁好用

各大平台视频无水印提取&#xff0c;登录即永久会员&#xff01; 无水印提取&#xff0c;图片无水印提取 视频旋转&#xff0c;倒放&#xff0c;转gif等功能 链接&#xff1a;https://pan.baidu.com/s/1buoJmAvSFBiRkBmHc7Nn5w?pwd2fu4 提取码&#xff1a;2fu4

考试如果出现汉诺塔问题怎么办?

对于这道题来说 就按照测试案例里的数字进行输入 测试案例用100 那这三只鸡的具体最多能有多少只鸡呢&#xff1f; 用总数除以这只鸡的单价>>>>>>>即为这只鸡最多有 >>>>>>>> n / 单价 修改后 >>>>> 不只适…

input子系统学习(一)

1、输入子系统框架 2、编写一个简单的设备驱动层代码 #include<linux/module.h> #include<linux/init.h> #include<linux/input.h> #include<linux/time.h>struct input_dev *my_input_dev;static void timer_function(struct timer_list *t); DEFINE…

.NET 一款用于入口打点的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

云计算【第一阶段(21)】Linux引导过程与服务控制

目录 一、linux操作系统引导过程 1.1、开机自检 1.2、MBR引导 1.3、GRUB菜单 1.4、加载 Linux 内核 1.5、init进程初始化 1.6、简述总结 1.7、初始化进程centos 6和7的区别 二、排除启动类故障 2.1、修复MBR扇区故障 2.1.1、 实验 2.2、修复grub引导故障 2.2.1、实…

Burpsuite靶场中信息泄露相关的实验通关

目录 第一关&#xff1a;错误消息中的信息披露 第二关&#xff1a;调试页面信息披露 第三关&#xff1a;通过备份文件披露源代码 第四关&#xff1a;通过信息披露绕过身份验证 第五关&#xff1a;版本控制历史中的信息披露 最近看大佬的文章&#xff0c;发现了很对自己没有…

Android 遥控器

遥控器源码 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RadialGradient; import android.graphics.Region; import android.g…

为什么word生成的PDF内容显示不全?

在现代办公环境中&#xff0c;将文档从一个格式转换为另一个格式是一个常见的任务。然而&#xff0c;有时候我们可能会遇到意想不到的问题&#xff0c;比如使用Word转换成PDF时&#xff0c;生成的PDF文件只显示了整个界面的四分之一内容。这种问题不仅令人困扰&#xff0c;也可…

Search for documents with similar texts

题意&#xff1a;搜索具有相似文本的文档 问题背景&#xff1a; I have a document with three attributes: tags, location, and text. 我有一份文档&#xff0c;包含三个属性&#xff1a;标签、位置和文本。 Currently, I am indexing all of them using LangChain/pgvecto…

Lua: 轻量级多用途脚本语言

Lua 是一种高效而轻量级的脚本语言&#xff0c;具备强大的扩展性和灵活性&#xff0c;广泛应用于游戏开发、嵌入式系统、Web 应用等多个领域。本文将深入探讨 Lua 的特性、应用场景以及如何使用 Lua 进行开发。 1. Lua 的起源与发展 Lua 的发展始于上世纪90年代初&#xff0c;…

GPT-5:AI新时代的领航者与我们的未来

一、引言&#xff1a;GPT-5的崭新时代 在科技的浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;领域正迎来一个崭新的纪元。GPT-5&#xff0c;作为OpenAI的最新成果&#xff0c;无疑将成为这个新时代的领航者。从GPT-1到GPT-4&#xff0c;我们见证了AI在自然语言处理领域…

零基础开始学习鸿蒙开发-页面导航栏布局设计

1.设定初始页(Idex.ets) import {find} from ../pages/find import {home} from ../pages/home import {setting} from ../pages/setting Entry Component struct Index {private controller: TabsController new TabsController()State gridMargin: number 10State gridGut…

开源分享:一套完整的直播购物系统源码

直播购物已经成为一种炙手可热的电商模式&#xff0c;吸引了无数商家和消费者的目光。对于开发者来说&#xff0c;构建一个功能齐全、用户体验优良的直播购物系统是一项复杂的任务。本文将分享一套完整的直播购物系统源码&#xff0c;帮助开发者快速搭建自己的直播购物平台。 …

决策树划分属性依据

划分依据 基尼系数基尼系数的应用信息熵信息增益信息增益的使用信息增益准则的局限性 最近在学习项目的时候经常用到随机森林&#xff0c;所以对决策树进行探索学习。 基尼系数 基尼系数用来判断不确定性或不纯度&#xff0c;数值范围在0~0.5之间&#xff0c;数值越低&#x…