没有基础也能写个小程序

文章记录了小程序的设计思路,介绍了使用的技术,描述了提交审核的故事,还提供了最终的完整源码

背景说明

微信小程序自从发布以来就占据着超高的话题热度,一直以来都想开发一款自己的小程序,但苦于不懂前端迟迟没有开始。偶然发现了ColorUI这个开源的小程序组件库,界面好看且提供Demo,心中狂喜马上动手

做个什么小程序呢?想了一圈这半年多一直坚持在写技术文章,为此开通了微信公众号,因为公众号查看文章列表不友好,且不方便在微信以外的渠道传播,我又利用Github Pages搭建了运维咖啡吧网站主页,就想做个类似于网站主页的小程序吧,可以在微信体系内优化公众号文章列表页读取以及方便分类检索

开发过程

计划参考运维咖啡吧网站主页写个小程序页面来展示微信公众号内的所有文章,后边加上搜索、标签等方便检索,用户点击列表后跳转到微信公众号具体的文章查看,形成闭环

首先写了个“列表”页,用来展示公众号内的所有文章,但写完列表后发现小程序并不支持跳转到公众号的文章,不能查看文章这个小程序的意义就失去了大半

然后添加了一个“关于”页面,页面内介绍小程序是干嘛的顺便给个公众号入口,方便对文章感兴趣的朋友继续阅读

代码完成后提交给小程序审核,约半天时间反馈审核失败,原因是“实际运营内容与名称简介不符”,想着可能审核的伙伴不知道运维是干嘛的,看到名称里包含咖啡吧,以为是跟咖啡相关的,反馈解释了一下什么是运维,以及小程序跟公众号的关系,再次提交审核,又等了半天功夫,还是反馈审核失败,这次原因是“小程序进入点击页面内容无反应”,我就写了个列表页,列表内容并不能点,这不是BUG,又反馈了一次但很遗憾跟上次一样的原因依然审核失败,看来必须得能点

决定添加一个“详情”页面,并不准备在详情内放文章的详细内容,因为这涉及到以往文章数据整理以及需要提供后端接口等问题,只想着能够审核通过,所以简单展示了文章的基本内容,给了个跳转到公众号的按钮

编码完成再次提交审核,顺利通过

所用技术

下边介绍一下这个小程序中用到一些技术点

for循环展示

列表页面的展示采用了for循环读取JS数据

JS里边用一个Blogs变量来记录文章列表页的数据,JS里边定义的变量可以直接在模板渲染时引用

Page({
  data: {
    StatusBar: app.globalData.StatusBar,
    CustomBar: app.globalData.CustomBar,
    Blogs: [
        {
            "title": "Django内置权限扩展案例",
            "image": "https://ws1.sinaimg.cn/large/7164c73agy1g0vl4k4veej20zk0f841d.jpg",
            "description": "当Django的内置权限无法满足需求的时候",
            "url": "https://mp.weixin.qq.com/s/BZsJnWLtv8ZwwlBYbWSbZQ",
            "tag": "Django"
        },
        {
            "title": "我们自研的那些Devops工具",
            "image": "https://ws1.sinaimg.cn/large/7164c73agy1g0vl4wtqdfj20zk0k00ve.jpg",
            "description": "随着云技术以及容器技术的崛起,人肉运维的时代结束了",
            "url": "https://mp.weixin.qq.com/s/HwOi-ARTvvNjGTWrDmZIkQ",
            "tag": "DevOps"
        }
    ]
  }
})

模板渲染时用到了循环标签wx:for,可以读取JS变量的列表值,然后通过{{item}}拿到列表中的每个对象,再通过{{item.key}}拿到对象的值

<view bindtap="toChild" data-blog="{{item}}" class="cu-item shadow" wx:for="{{Blogs}}" wx:key>
<view class="title">{{item.title}}</view>
<view class="content">
  <image src="{{item.image}}" mode="aspectFill"></image>
  <view class="desc">
    <view class="text-content"> {{item.description}}</view>
    <view class="flex justify-between">
      <text class="text-xs text-gray">原创:37丫37</text>
      <view class="bg-right cu-tag bg-green light sm round">{{item.tag}}</view>
    </view>
  </view>
</view>
</view>

后端取数据

考虑到文章可能会随时增加,将数据直接写在JS里边并不友好,每次变更还要重新发布审核,所以从后端接口读取数据才是最好的方式,但考虑到成本问题没必要专门写个后端程序来处理,直接将内容存json,提供https访问即可

在页面加载的时候去后台请求数据,然后给设置成变量Blogs,页面渲染参考上边介绍

onLoad: function () {
    var that = this;
    wx.request({
      url: 'https://ops-coffee.cn/blog.json',
      header: {
        'content-type': 'application/json'
      },
      //请求后台数据成功
      success: function (res) {
        that.setData({
          Blogs: res.data.data
        })
      }
    })
}

页面跳转

点击列表内容跳转到详情页该怎么实现呢?

我们先来看看跳转,跳转可以直接通过navigator标签实现,open-type指定跳转方式,url指定跳转的页面

<navigator open-type="navigate" url="/pages/index/detail/detail?data={{item}}" class="cu-item shadow" wx:for="{{Blog}}" wx:key>
    <view class="title">{{item.title}}</view>
    ...
</navigator>

或者通过bindtap事件触发wx.navigateTo实现跳转,data-blog可以指定bindtap事件参数,从而在JS中获取

<view bindtap="toChild" data-blog="{{item}}" class="cu-item shadow" wx:for="{{Blogs}}" wx:key>
toChild(event) {
    var blog = event.currentTarget.dataset.blog;

    wx.navigateTo({
      url: '/pages/index/blog/blog'
    })
}

本地存储

当点击列表内容跳转到详情页,正常的做法应该是去后台请求文章的详情以渲染详情页面,但这里我需要展示的内容列表页已经存在了,无需再次请求就找了个偷懒的做法,在用户点击列表内容时,把这篇文章的详细信息利用wx.setStorageSync存储在本地

toChild(event) {
    var blog = event.currentTarget.dataset.blog;

    wx.setStorageSync(
      'blog',blog
    );
}

然后在详情页加载时利用wx.getStorageSync取出来渲染到页面

onLoad: function (option) {
    var blog = wx.getStorageSync('blog');

    this.setData({
      blog:blog
    })
},

关联公众号

小程序提供关联公众号的功能,需要先在小程序后台:设置->关注公众号中开启公众号关注组件,然后在页面的相应地方添加上如下代码就可以像文章详情页最下边一样出来个关联公众号的组件

<official-account></official-account>

但访问时可能会发现打开详情页并没有出现关联公众号的组件,这个主要是因为并非所有的情况下都会展示,只有用对了姿势才能看到,官方文档有更多介绍,目前还没有办法彻底解决看不到的问题

页面分享

小程序上线后我想分享给朋友装逼,确发现没有方便的方式,查官方文档发现可以用onShareAppMessage方法,只需简单的添加到想分享页面的JS中即可,然后在右上角的功能按钮中就会出现转发功能

onShareAppMessage() {
    return {
      title: '运维咖啡吧',
      path: '/pages/index/list/list'
    }
}

源码地址

长按文末二维码关注微信公众号【运维咖啡吧】回复"03"可获取源码地址,期待你的到来

写在最后

  1. 感谢ColorUI,如此优秀的项目才能让我没有基础的情况下快速开发一款小程序
  2. 此项目从开发到完成大概只花了1天的时间,比较简陋,学习小程序的实验项目,各位轻喷
  3. 对于框架的学习我的做法是先看一遍官方文档的介绍,了解基本的内容,能看得懂项目结构,然后再开始编码


如果你觉得文章不错,请点右下角【好看】。如果你觉得读的不尽兴,推荐阅读以下文章:

原文地址:https://www.cnblogs.com/37Y37/p/10498779.html

时间: 2024-10-07 09:19:12

没有基础也能写个小程序的相关文章

Python:每天写点小程序

每天写点python小程序,下面是对一个txt文件的 里面的字数的统计,看的其他人的 1 file_name="E:\movie.txt" 2 #Python学习群125240963 3 4 5 line_counts=0 6 7 word_counts=0 8 9 character_counts=0 10 11 12 13 with open(file_name,"r") as f: 14 15 for line in f: 16 17 words=line.s

用mpvue写微信小程序时,webview跳转外部链接,再跳转回来需要点两次返回箭头才能跳转

问题描述: 给公司做微信小程序时遇到了这个问题,用mpvue框架搭建的小程序,从首页点击进去,先跳转到一个中间页面,在中间页面放上webview链接到外部的H5页面,这时点击小程序左上角自带的返回按钮,第一次会跳转到空白页,再点一次才能跳转到首页. 首页: 详情页: 这时需要点击左上角的返回箭头两次,才能跳转到首页 解决办法: 小程序跳到外部页面方法: 1.从首页(index)跳转到中间页(template): goPage(id){ wx.navigateTo({url:'../templat

从7点到9点写的小程序(用了模块导入,python终端颜色显示,用了点局部和全局可变和不可变作用域,模块全是自定义)

未完待续的小程序 要是能做的好看为啥不做的好看 在同目录下生成程序 1.程序文件 run.py from login import login from register import register from balance_enquiry import balance_enquiry from top_up import top_up msg_dict ={ '1':login, '0':register, '2':top_up, '3':balance_enquiry, 'q':'qui

实现自己写的小程序富文本编辑以及展示,不跟PC端的兼容,但是可以在pc端显示以及修改,一旦修改,小程序不再做解析

富文本结构: 1 <div class="detail_box"> 2 <ul> 3 <li v-for="(item4,index4) in detailAry" :key="index4"> 4 <!-- 文字 --> 5 <div class="detail_list"> 6 <div class="list_t"> 7 <

【转】java初学基础班经典练手小程序300例(飘叶寻梦整理)

一.函数1.*************************************************************************************************************************************编程题: 定义一个功能,完成对考试成绩的等级划分. 90~100 A 优秀 80~89 B 良好 70~79 C 中等 60~69 D 及格 60以下 E 不及格 class  Test04{ public static

利用 Makefile 写的小程序

1.建立一个工程 2.写一个进度条的程序(原理就是在同一位置重复打印某一个字符(变化),达到动态显示的效果) 所以说我们这里只用回车'\r',覆盖这一行以前的输出,重新向缓冲区写数据刷新缓冲区,就能达到动态显示的目的: 效果图如下: 3.在工程下新建一个叫做 Makefile 的文件(M 也可以小写),并用 vim 编辑 4.运行 make 得到 ProgressBar 可执行文件,运行 make clean 清除可执行文件 这里奉上一篇博客,博客中详细介绍了:Makefile ,make 的使

代写Java小程序: Finding customer clusters at the Telco

There can be no extensions to this date. All assignments for this subject for this semester MUST be submitted by the 29th March. No Exceptions. Previously, management have been quite directed about what they were looking for and what they wanted to p

用android去写一个小程序

前言: 软工的一个小作业:实现"黄金分割小游戏", 需要结对编程,队友:陈乐云(http://www.cnblogs.com/clyln/),用时两天. 早期思路设计: 采用键值对的形式,以Map作为存储结构.优点:能够将数据与用户对应,缺点:采用java实现过于复杂,工程量过大,需要消耗大量资源,类型转换容易出错. 后期思路设计: 采用二维数组:第一行用于存储用户输入原始数据,第二行用于存储中间数据(第一行的与G值做差的绝对值),第三行用于保存用户得分. 优点:实现简单,易于运算 分

写个小程序查看500以内的质数

''' 写一个500以内的Eratosthenes筛法找出全部素数 ''' class node(object): def __init__(self,num): self.visited = False self.isPrime = False self.num = num matrix = [node(i+1) for i in range(500)] count = 0 def isPrime(num): for i in range(2,int(num**0.5)+1): if(num