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

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

课程分三天:

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

第三天:完善我的小程序

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

intellij idea安装R包ggplot2报错问题求解

1、intellij idea安装R包ggplot2问题 在我上次解决图形显示问题后&#xff0c;发现安装ggplot2包时出现了问题&#xff0c;这在之前高版本中并没有出现问题&#xff0c; install.packages(ggplot2) ERROR: lazy loading failed for package lifecycle * removing C:/Users/V…

redis未授权访问漏洞复现

一&#xff0c;漏洞介绍 攻击者在未授权访问Redis的情况下&#xff0c;利用Redis自身的提供的config命令&#xff0c;可以进行写文件操作&#xff0c;攻击者还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中&#xff0c;进而可以使用对应私…

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展&#xff0c;大模型技术以其卓越的性能和广泛的应用前景&#xff0c;正在重塑人工智能领域的新格局。然而&#xff0c;任何技术都有两面性&#xff0c;大模型在带来前所未有便利的同时&#xff0c;也引发了深刻的安全和伦理挑战。 大模型&…

K8s的基本使用和认识

目录 介绍 控制端 Node(节点) 控制端与节点的关系图 基本使用 创建和运行资源 查找和参看资源 修改和删除资源 介绍 控制端 api-server(api)是集群的核心是k8s中最重要的组件,因为它是实现声明式api的关键 kubernetes api-server的核心功能是提供了Kubernetes各类资…

etcdctl txn如何使用

TXN 从标准输入中读取多个请求&#xff0c;并将它们应用到单个原子的事务操作中。一个事务包含 一系列的条件、所有条件都满足时要执行的一系列请求、任意条件不满足时要执行的一系列请求。 开启事务&#xff1a; etcdctl txn -i 开启事务后&#xff0c;需要先输入判断条件&a…

安装nvm node管理工具后,node跟npm命令却不生效了

在github上下载了nvm的压缩包 自定义安装到D盘之后&#xff0c;node跟npm命令都不生效了 解决办法&#xff1a; 1.在nvm目录下的settings.txt文件中增加淘宝镜像(要把之前安装的node全部删除 nvm uninstall node_mirror: http://npmmirror.com/mirrors/node/ npm_mirror: htt…

【做一道算一道】太平洋大西洋水流问题

太平洋大西洋水流问题 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &…

管理上的一些思考

1 前言 管理可分为自我管理、平级管理、向下管理和向上管理。 顾名思义&#xff0c;自我管理就是对自己工作、生活等各方面的规划和执行&#xff0c;不涉及与其他人互动、配合等。我们设定人生目标、年度计划、月计划等&#xff0c;都可以认为是自我管理。《增广贤文》有段很…

【涵子来信科技潮流】——WWDC24回顾与暑假更新说明

期末大关&#xff0c;即将来袭。在期末之前&#xff0c;我想发一篇文章&#xff0c;介绍有关WWDC24的内容和暑假中更新的说明。本篇文章仅为个人看法和分享&#xff0c;如需了解更多详细内容&#xff0c;请通过官方渠道或者巨佬文章进行进一步了解。 OK, Lets go. 一、WWDC24 …

内网安全【5】隧道搭建

1.内网穿透工具 Ngrok Frp Spp Nps EW(停更) 一共是这五个 优点&#xff1a;穿透加密数据&#xff0c;中间平台&#xff0c;防追踪&#xff0c;解决网络问题 Sunny-Ngrok内网转发内网穿透 - 国内内网映射服务器 https://github.com/esrrhs/spp https://github.com/fatedie…

第三十九篇——控制论:要不要成为变色龙?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 控制论&#xff0c;看似离我们很遥远&#xff0c;其实我们每天都在做着与…

Big Data Tools插件

一些介绍 在Jetbrains的产品中&#xff0c;均可以安装插件&#xff0c;其中&#xff1a;Big Data Tools插件可以帮助我们方便的操作HDFS&#xff0c;比如 IntelliJ IDEA&#xff08;Java IDE&#xff09; PyCharm&#xff08;Python IDE&#xff09; DataGrip&#xff08;SQL …

44 - 修复表中的名字(高频 SQL 50 题基础版)

44 - 修复表中的名字 -- concat(upper(left(name,1)),lower(right(name,length(name)-1))) -- concat(upper(left(name,1)),lower(substr(name,2)))selectuser_id,concat(upper(left(name,1)),lower(right(name,length(name)-1))) as name fromusers order byuser_id;

SpringBoot+Vue集成富文本编辑器

1.引入 我们常常在各种网页软件中编写文档的时候&#xff0c;常常会有富文本编辑器&#xff0c;就比如csdn写博客的这个页面&#xff0c;包含了富文本编辑器&#xff0c;那么怎么实现呢&#xff1f;下面来详细的介绍&#xff01; 2.安装wangeditor插件 在Vue工程中&#xff0c;…

1-4章复习

1-4章分数分布 第一章重点 中央处理单元真题

Transformer基础及视觉应用

文章目录 Transformer基础及视觉应用注意力机制基础(主要介绍Transformer用到的类型)Transformer的编解码器结构(Encoder and Decoder)Non-local Neural NetworksTransformer与大规模图像识别(Image Recognition at Scale)DETR-2020分割应用 Transformer基础及视觉应用 注意力…

【算法——双指针前缀和】

例题&#xff1a; 奇偶排序数组&#xff08;与下标对应&#xff09; 奇数偶数个数相等 922. 按奇偶排序数组 II #include<iostream> #include<vector> #include<algorithm> using namespace std;int main() {vector<int>nums { 4,2,5,7 };//指针x…

python进阶函数

目录 函数多返回值函数多种传参方式匿名函数 函数多返回值 问&#xff1a;如果一个函数如些两个return&#xff08;如下所示&#xff09;&#xff0c;程序如何执行&#xff1f; def return_num():return 1return 2result return_num() print(result)答&#xff1a;只执行了第…

【Python学习篇】Python实验小练习——异常处理(十三)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…