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

news/2024/7/7 22:20:18 标签: 微信小程序, notepad++, 小程序

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

课程分三天:

第三天:完善我的小程序

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

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.niftyadmin.cn/n/5535469.html

相关文章

ANSYS新能源汽车动力电池仿真应用案例

燃料电池是一种非燃烧过程的电化学能转换装置&#xff0c;将氢气&#xff08;等燃料&#xff09;和氧气的化学能连续不断地转换为电能&#xff0c;是发电设备而非储能设备。 根据电解质的不同&#xff0c;分为碱性燃料电池AFC、磷酸燃料电池PAFC、熔融碳酸盐燃料电池MCFC、固体…

Nordic 52832作为HID 键盘连接配对电视/投影后控制没反应问题的分析和解决

问题现象&#xff1a;我们的一款HID键盘硬件一直都工作的很好&#xff0c;连接配对后使用起来和原装键盘效果差不多&#xff0c;但是后面陆续有用户反馈家里的电视等蓝牙设备配对连接我们的键盘后&#xff0c;虽然显示已连接&#xff0c;但实际上控制不了。设备涉及到了好些品牌…

RNN、LSTM与GRU循环神经网络的深度探索与实战

循环神经网络RNN、LSTM、GRU 一、引言1.1 序列数据的迷宫探索者&#xff1a;循环神经网络&#xff08;RNN&#xff09;概览1.2 深度探索的阶梯&#xff1a;LSTM与GRU的崛起1.3 撰写本博客的目的与意义 二、循环神经网络&#xff08;RNN&#xff09;基础2.1 定义与原理2.1.1 RNN…

heapq.nlargest函数

函数解释 heapq.nlargest(n, iterable, keyNone) 该函数用于从可迭代对象iterable中返回前n个最大的元素。它的参数包括&#xff1a; n&#xff1a;要返回的最大元素的数量iterable&#xff1a;要从中查找最大元素的可迭代对象key&#xff1a;一个函数&#xff0c;用于从每个…

使用redis分布式锁,不要把锁放在本地事务内部

在使用分布式锁的时候,习惯性的尽量缩小同步代码块的范围。 但是如果数据库隔离级别是可重复读,这种情况下不要把分布式锁加在Transactional注解的事务方法内部。 因为可能会出现这种情况&#xff1a; 线程1开启事务A后获取分布式锁,执行业务代码后在事务内释放了分布式锁。…

Jmeter下载、安装及配置

1 Jmeter介绍 Jmeter是进行负载测试的工具&#xff0c;可以在任何支持Java虚拟机环境的平台上运行&#xff0c;比如Windows、Linux、Mac。 Jmeter模拟一组用户向目标服务器发送请求&#xff0c;并统计目标服务器的性能信息&#xff0c;比如CPU、memory usage。 2 Jmeter下载 …

确认下单:购物车页面点击 去结算 按钮发起两个请求trade(显示购物车的商品信息和计算商品的总金额)findUserAddressList

文章目录 1、确认下单&#xff1a;购物车页面点击去结算1.1、在OrderController类中创建 trade 方法1.2、在CartController类中创建 checkedCartInfos1.3、CartServiceImpl 实现 checkedCartInfos的业务功能1.4、在service-cart-client模块下定义远程openFeign接口1.5、在SpzxO…

Django 多对多关系

多对多关系作用 Django 中&#xff0c;多对多关系模型的作用主要是为了表示两个模型之间的多对多关系。具体来说&#xff0c;多对多关系允许一个模型的实例与另一个模型的多个实例相关联&#xff0c;反之亦然。这在很多实际应用场景中非常有用&#xff0c;比如&#xff1a; 博…