如何从零开始写小程序

2023-11-18

看了这篇文章,即使让我现在就从头写一个能够正常运行的小程序,也没有原本想象中的那么难了。

在本文中,我们将会以一个具体的小程序为例,带领大家从零到一完成一个小程序的开发流程,并将这个小程序上传到 FinClip.com 进行小程序提审与上架操作。

我们新建了一个叫做「HelloWorld」的小程序,FIDE 在初始化小程序项目时,会自动在项目目录中补充对应所需要的项目文件。那不妨让我们先从小程序目录下的配置文件开始,逐渐揭开小程序的面纱。

使用 FIDE 编辑小程序

1. 认识 json 文件

在小程序项目目录下,我们首先看到一个 app.json 文件,与其他常见的后缀为 .pptx /.mp4 /.py 文件不同,json 即不是一种可执行文件也不是一种编程语言,而是一种数据格式文件。
在这里插入图片描述

json 主要以两侧的 { } (花括号)为代表,花括号也是 json 文件的基本结构,在 json 文件中,我们一般会通过 key -
value 的方式来表达数据,而 value 的值一般会被放在双引号中。修改编辑 json
文件时需要严格遵守相关的数据格式(比如不能添加注释,不能使用单引号),否则会编译失败。

在 app.json 文件中,会包括当前小程序的全局配置,也是在这里对小程序的所有页面路径,界面样式等信息进行配置的综合入口。

在这里插入图片描述
在上图中我们会看到一共有 4 个字段(即 pages,window,style 和 sitemap),其中 pages 用来描述当前小程序中所有的页面路径,windows 字段用来定义小程序中的页面顶部颜色,所显示的名称等,style 字段用来约束小程序中组件的默认使用样式,而 sitemap 字段则用来控制小程序可被索引的内容。

但如果我们把后面的 3 个字段(即 window,style,sitemap)都删除掉,小程序是否能够被正确编译呢?
在这里插入图片描述
事实上,pages 字段是配置文件中唯一必须的字段。所有小程序中的页面都需要在 app.json 中进行注册(即在 pages 这个数组下添加对应的路径)。

但我们也发现,随着 app.json 中其他字段被删除,小程序顶部的导航栏背景变为了黑色。

如果我们需要对不同的页面进行自定义设置,则需要到不同页面目录下的 page.json 进行单独设置(如在 index 页面目录下,则需要修改 index.json 文件)。

如何对某个页面进行单独配置呢?让我们打开对应的页面目录(如 「pages-index」),修改目录中的 index.json 文件:

本段中,我们仅仅以“导航栏背景”与“导航栏文字”进行设置,其实 FinClip 小程序中还有非常多的其他组件,我们可以查看「文档中心 -
开发 - 指南 - 配置小程序」了解更多的可配置内容。

{
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTextStyle": "black"
}

在 json 中配置导航栏的背景颜色

顾名思义,这里的“navigationBarBackgroundColor”指的就是“导航栏背景颜色”,而“navigationBarTextStyle”指的就是“导航栏字体样式”。

在这里插入图片描述

2. 创建页面

在这里插入图片描述
在创建页面时,也不需要单独在新增的目录中新增 ftss,fxml,js 和 json 文件,我们仅需要像上图这样,点击顶部的项目名称右侧“第二个加号”创建新目录,右键新目录,并点击「创建 page」输入页面名称,即可自动完成新目录的创建。

通过「创建 page」的形式新建页面,FIDE 会自动将页面文件增加到 app.json 文件中,而如果是通过手动创建页面的形式,则需要开发者自行将页面在 app.json 文件中进行注册。而如果我们需要删除某个页面目录,则也需要在 app.json 文件中清空对应的页面路径。

3. 认识 fxml 文件

如同《开发小程序的正确方式》所说,fxml 是小程序中不同页面的结构文件,通过结合组件和事件系统,就能像玩乐高积木一样,拼搭出页面的整体框架。

为了便于更清晰地熟悉小程序开发过程,我们需要先删除项目中的 index 和 logs 目录,在“pages”目录下新建“introduce”目录,并且修改 app.json 仅保留以下内容:

{
  "pages": [
    "pages/introduce/introduce"
  ]
}
app.json

在修改保存后重新编译,我们会看到 FIDE 变成了下图这个样子,页面中的“introduce”是 FIDE 自动添加的。
在这里插入图片描述
顶部导航栏的黑色背景太突兀了,让我们打开 introduce.json 文件,定义其中的背景与文字颜色:

{
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTextStyle": "black"
}

introduce.json

接下来,让我们选中 introduce.fxml 文件,在编辑器中删除 FIDE 自动创建的默认代码(即 introduce ),并在其中输入如下代码:

<view>
    <text>Hello, World</text>
    <image src="https://www.finclip.com/mop/document/images/logo.png" ></image>      
    <view>
        <text>开启 FinClip 小程序之旅</text>
    </view>
</view>

introduce.fxml

保存后点击编译,会看到和下图一模一样的界面,在左侧的模拟器区域成功出现了文字与图片信息。
在这里插入图片描述

在这段代码中,我们使用了 3 个 FinClip 小程序的组件,分别是 , 和 。

  • 组件通常作为容器来使用,就像是 HTML 中的
    标签一样;
  • 组件通常用来显示一段文字,就像是 HTML 中的 标签一样;
  • 组件用来显示图片,就像是 HTML 中的 标签一样;

我们一般会通过「组件」来描述小程序 fxml 中的相关元素,而通过「标签」描述 HTML 中的相关元素。二者的区别主要是因为,HTML
是一种标记性语言,标签主要用于标记页面中的各种 DOM
元素,而在小程序中,组件不仅仅可以用来标记不同的元素,也可以通过对应的各类属性完成更丰富的拓展。

在这里插入图片描述
我们发现,模拟器区域中的图片长宽比失真,而 组件刚好有一个"mode" 的属性,因此我们可以在 组件中加上这个属性字段,来优化图片的显示比例。

<view>
    <text>Hello, World</text>
    <image mode="widthFix" src="https://www.finclip.com/mop/document/images/logo.png"></image>      
    <view>
        <text>开启 FinClip 小程序之旅</text>
    </view>
</view>

introduce.fxml

在上面的 组件中,我们引用了一张线上的图片,我们也可以将这张图片放在小程序对应的目录中,并且在 src 中替换图片路径。

目前 FIDE 暂时不支持直接复制粘贴对应的文件到指定目录中,所以需要先通过文件管理器或 Finder
进行源文件的处理。在示例中,我们将这个图片放在了 /images 目录中。

在这里插入图片描述

<view>
    <text>Hello, World</text>
    <image src="/images/logo.png" mode="widthFix"></image>      
    <view>
        <text>开启 FinClip 小程序之旅</text>
    </view>
</view>

introduce.fxml

替换图片路径时,我们采用了绝对路径的写法。绝对路径以“/”开头,代表从文件的根目录开始定位文件的位置。

4. 认识 ftss 文件

如同《开发小程序的正确方式》所说,编写小程序样式的语言也是 CSS,所以我们只需要将 CSS 代码写在对应页面的 ftss 文件中即可。

之所以被命名为 ftss,也是代表 fantai stylesheet 的意思(fantai 即凡泰极客,FinClip 的出品公司)。

而与编辑 HTML 中的 CSS 一样,我们在编辑 introduce.ftss 之前,我们需要先在 introduce.fxml 中为每个需要编辑样式的组件定义 class name。

<view class="container">
    <text class="chief">Hello, World</text>
    <image class="avatar" src="/images/logo.png" mode="widthFix"></image>      
    <view class="journey-container">
        <text class="journey">开启 FinClip 小程序之旅</text>
    </view>
</view>

introduce.fxml

紧接着,我们再回到 introduce.ftss 中,编写对应的 CSS 内容:

.container{
    display: flex;
    flex-direction:column;
    align-items: center;
}

.chief{
    margin-top: 20rpx;
    font-size: 32rpx;
    font-weight: bold;
    color: #1E48F5;
}

.avatar{
    width: 500rpx;
    margin:20rpx;
}

.journey-container{
    margin-top: 50rpx;
    border: 1rpx solid #1E48F5;
    width: 500rpx;
    height: 100rpx;
    border-radius: 20rpx;
    text-align: center;
}

.journey{
    font-size: 36rpx;
    font-weight: bold;
    line-height:100rpx;
    color: #1E48F5;
}

保存后编译,我们会发现 FIDE 左侧模拟器中已经出现了一个“样式正常”的页面,文字与图片都能够“正常显示”了。
在这里插入图片描述
在这里,我们也简单讲解一下这些 CSS 样式的作用:

  • container 是所有组件的容器样式,我们使用了 Flex 布局控制子元素的排布样式;
  • chief 是顶部“Hello,World”这段文本的样式;
  • avatar 是图中 FinClip Logo 的图片样式; .journey-container是“开启 FinClip 小程序之旅”的外边框;
  • journey 是“开启 FinClip 小程序之旅”的文字样式;
  • 假设我们的小程序中包括数十个页面,而在不同的页面目录内单独修改 page.ftss 就显得比较笨拙了。

与 page.json 与 app.json 一样,ftss 也有默认的全局配置文件,就是我们在小程序根目录中看到的 app.ftss 文件。当小程序目录中 app.ftss 与 page.ftss 中的内容重复时,则会优先读取页面中的样式文件。

  1. 认识 js 文件
    在一个小程序中,如果只有界面展示是完全不够的,还需要增加一些用户交互的响应内容,而这些与用户交互相关的脚本(如响应用户的点击、获取用户的位置等等)则需要通过 JS 脚本文件来进行处理。

让我们尝试给小程序中的 FinClip Logo 增加一个交互吧!

首先,我们在 introduce.fxml 中增加一个组件,并且定义为“hey” :

<view class="container">
    <text class="chief">Hello, World</text>
    <image bindtap="clickMe" class="avatar" src="/images/logo.png" mode="widthFix"></image>      
    <view class="journey-container">
        <text class="journey">开启 FinClip 小程序之旅</text>
    </view>
    <view class="hey">{{ msg }}</view>
</view>

底部的 hey 就是我们新增的内容

然后,在 introduce.ftss 中为这个组件写明对应的样式:

.container{
    display: flex;
    flex-direction:column;
    align-items: center;
}

.chief{
    margin-top: 20rpx;
    font-size: 32rpx;
    font-weight: bold;
    color: #1E48F5;
}

.avatar{
    width: 500rpx;
    margin:20rpx;
}

.journey-container{
    margin-top: 50rpx;
    border: 1rpx solid #1E48F5;
    width: 500rpx;
    height: 100rpx;
    border-radius: 20rpx;
    text-align: center;
}

.journey{
    font-size: 36rpx;
    font-weight: bold;
    line-height:100rpx;
    color: #1E48F5;
}

.hey{
    margin-top: 40rpx;
    font-size: 28rpx;
    color: #333;
}

我们定义了这个 hey 的上边距,字体大小与颜色

最后,再回到 introduce.js 中补充对应的交互效果:

Page({
  clickMe: function() {
    this.setData({ msg: "你点击了 FinClip 的 Logo!" })
  }
})

点击 logo 后显示对应的文字

保存后编译,点击 Logo 后会发生什么变化呢?
在这里插入图片描述
既然可以给 Logo 上绑定脚本事件,那理所当然我们可以在 introduce 页面中的「开启 FinClip 小程序之旅」上也绑定一个跳转事件,不如就在点击按钮之后,跳转到我们的 FinClip 博客中吧!

考虑到本文的主要目标是带领各位读者完成一个完整小程序的制作过程。 Fxml 的代码逻辑与 HTML 的代码逻辑几乎一致,js 文件也有其相对应的编写方法,Ftss 的代码逻辑与 CSS 样式代码逻辑几乎一致,因此在本文中则不再赘述。

6. 说干就干

既然我们想通过点击「开启 FinClip 小程序之旅」打开博客页面,那理所当然需要先做一个装载博客的页面。FinClip 提供了 web-view 的组件来承载网页,因此我们仅仅需要在页面中加入这个组件。

第一步,创建 blog 页面

还是按照前文所提到的「创建 page」的方法,创建对应的页面(如 blog 页面),并在 blog.fxml 中引入 web-view 组件,此时 blog.fxml 中的内容为:

<web-view src="https://finclip.com/blog/"></web-view>

blog.fxml 中的内容

第二步,为按钮增加属性

回到 introduce.fxml 中,为之前写好的 增加按钮属性 bindtap=“goBlog” ,此时 introduce.fxml 中的内容为:

<view class="container">
    <text class="chief">Hello, World</text>
    <image bindtap="clickMe" class="avatar" src="/images/logo.png" mode="widthFix"></image>      
    <view bindtap="goBlog" class="journey-container">
        <text class="journey">开启 FinClip 小程序之旅</text>
    </view>
    <view class="hey">{{ msg }}</view>
</view>

introduce.fxml

第三步,修改 js 脚本,补充跳转动作

再让我们切换到 introduce.js 中,为 goBlog 增加后续的交互动作,通过 ft.navigateTo 来增加跳转逻辑,此时 introduce.js 中的内容为:

Page({
  clickMe: function() {
    this.setData({ msg: "你点击了 FinClip 的 Logo!" })
  },
  goBlog: function(){
    ft.navigateTo({
      url:'../blog/blog'
    })
  },
})

introduce.js

二者之间的关系是这样的:
在这里插入图片描述
简而言之,我们在 fxml 中为按钮绑定了对应的按钮属性,随后又在 js 脚本中为这个按钮增加了对应的跳转操作。
第四步,修改 page.json
再保存编译后,我们发现已经可以通过点击「开启 FinClip 小程序之旅」跳转到我们的 FinClip 博客中了,但好像两个页面顶部的背景还颜色还不太统一,因此我们还需要做一点点小的修改:

(1)首先修改 app.json
通过全局定义的方式,修改顶部的导航栏背景与文字颜色为白底黑字

{
  "pages": [
    "pages/introduce/introduce",
    "pages/blog/blog"
  ],
  "window":{
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTextStyle": "black"
  }
}

app.json 中约束顶部导航栏的背景与文字颜色

(2)分别修改 page.json
修改不同页面中的导航栏标题内容,来区分不同的页面

{
    "navigationBarTitleText": "我的第一个 FinClip 小程序"
}
introduce.json
{
    "navigationBarTitleText": "FinClip Blog"
}

blog.json

(3)保存并编译小程序
既然一切就绪,编译时也没有提示对应的报错信息,那我们一起编写的小程序应该能够正常顺利的运行了,一起来试试吧!
在这里插入图片描述
感觉还行,不仅点击 FinClip 的 Logo 能显示我们提前配置好的文字,点击对应的按钮也会跳转到我们的博客之中。

我们也可以点击 FIDE 顶部工具栏的「预览」,通过 FinClip APP 扫码,在真机上进行预览。

将小程序上传到 FinClip

如果你阅读了我们的前一篇文章《开发小程序的正确方式》,其中第一步就是介绍如何在 FinClip.com 中创建账号并新建小程序,第四步则是使用同样的账号登录 FIDE ,为了节省篇幅我们就不再重复这一过程了。

我们需要在 FIDE 中登录账号,并点击顶部工具栏右侧的「上传」按钮,并选择我们提前新建的小程序。

在这里插入图片描述
然后,我们需要登录 FinClip.com,点击首页或左侧的「小程序管理」,进入到已经新建好的小程序详情中,进行小程序的提审与上架操作。
在这里插入图片描述
选中版本并点击「下一步」后,就到了补充审核信息的步骤了。如果我们的小程序比较简单,也不包括登录逻辑,则可以直接点击下一步对所有信息进行二次确认。

在这里插入图片描述
在这里插入图片描述
其实也可以直接勾选底部的「审核通过后自动上架」。如果在预览小程序时有任何觉得需要修改的地方,都可以关闭窗口,更新对应的内容。

在审核通过后,点击「审核版本」卡片右侧的「版本上架」,就可以将小程序上架在 FinClip.com 中了。

点击「审核版本」左侧的「线上版」按钮,即可获得一个可以公开的二维码,任何人均可通过 FinClip APP 扫码体验。

在这里插入图片描述
为了帮助你更好的体验,了解小程序的使用模式,我已经将这个小程序上架到了 FinClip 的小程序应用市场中,你可以下载小程序的代码包进行修改,看看会有什么新的变化。

在这里插入图片描述

祝您成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从零开始写小程序 的相关文章

随机推荐

  • Linux实用工具

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 Windows下同步Linux文件 Linux安装Samba和配置 场景需求 安装了Ubuntu在虚拟机上 但是代码编辑或者其它更多的操作的时候 还是习惯在window
  • @Autowired注解的实现原理

    Autowired注解用法 在分析这个注解的实现原理之前 我们不妨先来回顾一下 Autowired注解的用法 将 Autowired注解应用于构造函数 如以下示例所示 public class MovieRecommender privat
  • 3dmax2014卸载/安装失败/如何彻底卸载清除干净3dmax2014注册表和文件的方法

    3dmax2014提示安装未完成 某些产品无法安装该怎样解决呢 一些朋友在win7或者win10系统下安装3dmax2014失败提示3dmax2014安装未完成 某些产品无法安装 也有时候想重新安装3dmax2014的时候会出现本电脑win
  • 【电子电路】逻辑章

    人不能 至少不应该 一天速成电子电路 不全 漏掉的那部分是常识或者 真的是眼睛不好了 BCD码 即8421码 2421码 余3码 平常的二进制就是8421码 其余以此类推 符号位 1100 正 1101 负 可靠性编码 奇偶校验码 奇校验
  • H5页面与vue的客户端交互

    工作中经常遇到一些奇怪的东西 我有个这样的需求 就是我写的vue项目被嵌套在别的h5项目页面下 so进入我的页面前需要判断他的h5页面有没有登录 这时候就需要我的客户端页面调用h5页面的登录方法 客户端页面 ios 安卓 两种都得交互h5页
  • 海康威视系统未连接服务器,ivms-4200客户端登入不了云服务器

    ivms 4200客户端登入不了云服务器 内容精选 换一换 本章节为您介绍以下内容 准备弹性云服务器作为GDS服务器在使用GDS导入导出数据之前 需要准备一台或多台与GaussDB DWS 集群在相同VPC内的Linux弹性云服务器 简称E
  • Redis使用总结(四、处理延时任务)

    引言 在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单30分钟未支付 则自动取消 生成订单60秒后 给用户发短信 对上述的任务 我们给一个专业的名字来形容 那就是延时任务 那么这里就会产生一个问题 这个延时任务和定时任务的区别究竟
  • 简单讲解一下什么是ATT&CK框架

    点击 仙网攻城狮 关注我们哦 不当想研发的渗透人不是好运维 让我们每天进步一点点 简介 ATT CK框架由 MITRE 安全组织提出并列出了APT 高级可持续威胁攻击 的14个阶段涉及到206个安全技术点上千种攻击 检测手段 基本覆盖所有网
  • Mip-Nerf三维重建代码复现教程——环境配置

    Mip Nerf三维重建Pytorch使用Pycharm运行0基础教程 项目论文 项目Github 你好 这里是 出门吃三碗饭 本人 本文章接下来将介绍如何从0运行2020会议Mip Nerf的Pytorch版本 让你自己动手渲染第一个三维
  • 网络安全应急响应----1、应急响应简介

    目录 1 应急响应流程 2 PDCERT应急响应方法模型 3 应急响应常见事件 4 应急响应分析流程 网络安全应急响应 针对已经发生的或可能发生的安全事件进行监控 分析 协调 处理 保护资产安全 1 应急响应流程 2 PDCERT应急响应方
  • uni-App聊天功能的源码

    前言 泡泡IM uniapp版聊天源码是一套完整的基于uniapp开发的聊天软件源码 可编译成微信小程序 安卓 IOS APP聊天软件 H5网页聊天室 uniapp聊天源码未加密 无外部依赖 可私有化部署 可二次开发 文档全面 接口丰富 方
  • 仿kafka实现java版时间轮

    系统定时 超时 在我们平时的项目开发中 会设置系统的超时时间 比如在http接口中设置超时时间 在定时调度中也会用到 在jdk的开发的实现Timer和ScheduledThreadPoolExecutor DelayQueue定时调度中使用
  • React学习之扩展浅比较(三十四)

    注意 这玩意也已经被React PureComponent的功能取代了 这里依旧是提一下 主要是React v15的版本中的react with addons js 这些玩意还存在 哎 害人呐 引入 import shallowCompar
  • c#图像保存为icon

    Icon操作类 实现了将Image图像向Icon的转化 调用示例 Image pic Image FromFile D tmp 2 png IconTool SaveToIcon pic D tmp test2 ico class Icon
  • 5.x Linux RT-Preempt补丁和ARM平台RT-test编译

    1 在make menuconfig中 5 x版本内核的RT Preempt设置在General Setup下面 2 ARM平台的RT test编译 git clone git git kernel org pub scm utils rt
  • springboot 集成elasticsearch遇到的坑

    最近开始学习elasticsearch 所以就想着在springboot里面集成一下elasticsearch 结果遇到了不少麻烦 下面总结一下 但愿大家和自己以后都少走弯路 首先声明下 本人开始学习elasticsearch的时候 官网最
  • python-类变量(类属性),实例变量(实例属性),self作用

    类中定义的变量又称之为属性 类中定义的函数又称之为方法 类中 所有函数 方法 之外 此范围定义的变量 称为类属性或类变量 类中 所有函数 方法 内部 以 self 变量名 的方式定义的变量 称为实例属性或实例变量 类中 所有函数 方法 内部
  • nuxt3 pinia pinia-plugin-persistedstate

    安装pinia yarn add pinia pinia nuxt 或者使用 npm npm install pinia pinia nut 安装pinia plugin persistedstate npm npm i pinia plu
  • x-studio(Lua调试器,粒子编辑器,UI编辑器,代码编辑器,csb恢复工具)

    最新版本 x studio 10 0 9000 29 2020年4月14日更新 官网 https x studio net 官方教程 https docs x studio net x studio是一款强大的游戏开发IDE 由作者历时5年
  • 如何从零开始写小程序

    看了这篇文章 即使让我现在就从头写一个能够正常运行的小程序 也没有原本想象中的那么难了 在本文中 我们将会以一个具体的小程序为例 带领大家从零到一完成一个小程序的开发流程 并将这个小程序上传到 FinClip com 进行小程序提审与上架操