初学小程序

2021.7.10

微信小程序初学

官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/getstart.html#%E7%94%B3%E8%AF%B7%E5%B8%90%E5%8F%B7

  • 首先注册账号 需要一个跟微信没有任何关系的邮箱

    image-20210709162842537

  • 下载小程序开发工具 并扫码登录 创建项目

    AppId可以在https://mp.weixin.qq.com/wxamp/home/guide?lang=zh_CN&token=1375177217小程序后台开发者设置中查看

    image-20210709163044264

1. 小程序的结构目录

小程序框架(原生框架为`Mina`)的目标是通过尽可能简单、高效的方式让开发者可以在微信中开发具有原生APP体验的服务。

​ 小程序框架提供了自己的视图层描述语言 wxmlwxss,以及Javascript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

对比:

结构传统web微信小程序
结构HTMLWXML
样式CSSWXSS
逻辑JavaScriptJavaScript
配置JSON

通过对比可得,传统web是三层结构。而微信小程序,是四层结构, 多了一层配置.json

1.1 基本项目目录

image-20210709163803613

2. 小程序配置文件

一个小程序应用程序会包括最基本的两种配置文件。一种是全局的app.json和页面自己的page.json

配置文件中不能出现注释

2.1 全局配置app.json

image-20210709164553316

若需要新建页面, 可以手动在左边文件夹出右键新建然后在挨个创建其他文件 或者直接在app.json中的page里进行添加页面 保存后则会自动生成

该pages中的顺序为页面的展示顺序, 若想要首页为刚创建的Demo1则可以将demo1放在第一行

image-20210709165235993

在window中可以进行导航的基本配置信息

image-20210709170645139

  • enablePullDownRefresh 开启下拉刷新操作 默认为false
  • backgroundTextStyle 下拉刷新的图标的颜色 dark/light
  • backgroundColor 下拉刷新时的背景颜色
2.1.1 tabbar

image-20210709171515446

测试

image-20210709173442699

参数配置可以在官网查看api

image-20210709174353131

image-20210709174422336

2.2 页面配置 page.json

image-20210709175206955

在某页面中的json文件进行该页面的配置则会覆盖全局配置的属性信息

image-20210709175749980

2.3 sitemap 配置

小程序根目录下的sitemap.json文件用于配置小程序及其页面是否允许被微信索引。

3. 模板语法

WXML (WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。

3.1 数据绑定

image-20210713154348429

image-20210713154409717

image-20210713155521288

3.2 运算

image-20210713160758883

3.3 数组和对象的循环

image-20210713162703891

Block标签

  • 占位符的标签
  • 写代码的时候 可以看到这个标签的存在
  • 页面渲染后 小程序会把它移除掉

image-20210713163004799

image-20210713163057799

3.4 条件渲染

<view>
    <view wx:if="{{true}}">显示</view>
    <view wx:if="{{false}}">隐藏</view>
</view>

=========================================================
<view>
    <view wx:if="{{true}}">1</view>
    <view wx:elif="{{false}}">2</view>
    <view wx:else="{{true}}">3</view>
    <!-- 实现隐藏 -->
    <view hidden>hidden</view>
</view>

image-20210713171752033

image-20210713171809485

4. 事件绑定

小程序中绑定事件, 通过bind关键字来实现 如 bindtap bindinput bindchange

不同的组件支持不同的事件, 具体看组件的说明即可

wxml

<input bindinput="handleInput"/>

page

Page{
  //绑定的事件
    handleInput: function(e){
    	    
    }
}

测试

image-20210713172850954

image-20210713172931479

image-20210713172938629

image-20210713172949494

实现 按钮点击+1和-1

image-20210713174430947

  • 定义两个按钮 并绑定事件

    image-20210713174410608

  • 编写方法

    image-20210713174241335

5. 样式 WXSS

rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。简单得说就是相对大小吧。

  1. 小程序中不需要主动引入样式文件。(即不需要link,只用在相关文件夹里创建好有关文件即可)
  2. 如果想在wxss或css中计算rpx得利用到calc属性:rpx(单位)的位置可以随便放,但要注意,周围不要有空格。
view{
  width:calc(750rpx*200/320);
  /* width:calc(750*200/320rpx);这样也可以 */
  height:200px;
  font-size:40px;
  background-color:red;
}

测试

image-20210713180111655

image-20210713180327402

wxss代码

view{
    /*width: 200rpx;*/
    height: 200rpx;
    font-size: 40rpx;
    background-color: aqua;
    width: calc(750rpx * 100/ 375);
}

wxml代码

<view>
    乌拉拉
</view>

image-20210713180621119

5.1 样式导入

wxss中直接就支持 样式的导入功能 也可以和 less中的导入混用

使用@import语句可以导入外联样式表,只支持相对路径

.small-p{
 	padding: 5px;   
}
@import "common wxss";
.middle-p{
    padding:15px;
}

测试

  • 创建style文件夹 并创建common.wxss

    image-20210713181418609

  • 编写代码

    image-20210713181435811

  • 在demo5页面中的wxss中引入使用

    image-20210713181511370

    image-20210713181525064

5.2 选择器

小程序不支持通配符*

//不支持 * 
*{
    margin:0;
    padding:0;
}

目前支持的选择器有:

image-20210714094849379

5.3 小程序中使用less

Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。Less 可以运行在 Node 或浏览器端。

  1. 例如在vscode中可以安装插件easy less

  2. 在vs code的设置中加入如下配置

    "less.compile": {
    	"outExt": ".wxss"
    }
    
  3. 在要编写样式的地方, 新建less文件, 如index.less然后正常编辑即可

6. 常见组件

如: view, text, rich-text, button, image, navigator, icon, swiper, radio, checkbox

view

image-20210714100139183

代替原来的div标签

<view hover-class="h-class">
 	Click
</view>

text

  • 文本标签
  • 只能嵌套text
  • 长按文字可以复制
  • 可以对控制回车 进行编码

image-20210714100331313

image

  • 图片标签, image组件默认宽度320px、高度240px
  • 支持懒加载

image-20210714100833642

mode有效值

mode有13种模式, 其中4种是缩放模式, 9种是裁剪模式

image-20210714101547042

测试

image-20210714101512911

swiper

微信内置的轮播图组件

image-20210714104431990

image-20210714103818684

测试

  • 编写轮播图

    image-20210714104554773

  • 编写样式

    image-20210714104752073

navigator

导航组件 类似超链接标签

image-20210714105051305

image-20210714110655237

测试

image-20210714111159082

rich-text

**富文本标签: **可以将字符串解析成对应标签, 类似vue中的v-html功能


  • 在data中定义html标签文本

    image-20210714111653250

  • 页面使用rich-text标签image-20210714111729615


或者自定义data文本标签 不常用

image-20210714112155054

button

image-20210714112234578

测试

<button
   type="default"
   size="15px"
   loading="true"
   plain="true"
>
    Click
</button>

image-20210714112554893

open-type的合法值

image-20210714112646791

开放能力

image-20210714133006539
image-20210714133256277

例如在使用getUserInfo时 需要在js中定义该方法获取回调值

image-20210714133546769

image-20210714133447560

image-20210714133520651

开放能力二

因为使用的是测试appid无法在真实的手机端显示 这时改为自己的appid进行测试

在后台添加客服微信

即可编译后扫码在手机上进行小程序的测试

icon

image-20210714134515361

image-20210714134654360

radio

可以通过color属性来修改颜色

需要搭配radio-group一起使用

image-20210714134833790

测试

image-20210714135048504

image-20210714135031226

checkbox

可以通过color属性来修改颜色

image-20210714135215347

image-20210714135659691

image-20210714135517237

image-20210714135628383

7. 自定义组件

类似于vue或者react中的自定义组件

7.1 创建自定义组件

类似于页面,一个自定义组件由json wxml wxss js 4个文件组成

可以在微信开发者工具中快速创建组件的文件结构

测试

image-20210714140401013

在tabs.json中可以看到自定义组件声明

{
  "component": true,   //证明是一个组件
  "usingComponents": {}
}

在某页面中引入该组件 在该页面的json文件中配置

image-20210714140910886

然后在页面引入即可

image-20210714141005907

7.2 自定义组件的样式优化

  • 在tabs组件编写样式

    image-20210714142326376

    image-20210714142353596

    image-20210714142409035

  • 由于以上是将内容写死的 不太友好

    1. 在tabs中的js文件中定义该四个标签

      image-20210714142627923

    2. 在页面循环遍历展示数组 并控制选中信息

      image-20210714142950027

7.3 标题的激活和选中

  • 首先在tabs.wxml中添加属性索引

    image-20210714144727144

  • 在tabs.js文件中编写方法

    /**
       * 1. 页面.js 文件中 存放事件回调函数的时候 存放在data同层级下
       * 2. 组件.js 文件中 存放事件回调函数的时候 必须要存在methods方法中
       */
      methods: {
        hanldeItemTap(e){
          /*
            1. 绑定点击事件 需要在methods中绑定
            2. 获取被点击的索引
            3. 获取原数组
            4. 对数组循环
              1. 给每一个循环 选中属性 改为 false
              2. 给当前的索引的项 添加激活选中效果就可以了
           */
          // 获取索引
          const {index} = e.currentTarget.dataset;
          // 获取data中的数组
          // 对于复杂类型进行结构的时候  复制了一份 变量的引用而已
          // 最严谨的做法 是重新拷贝一份 数组 在对这个数组的备份进行处理
          //let tabs = JSON.parse(JSON.stringify(this.data.tabs));
          let {tabs} = this.data;
          // 循环数组
          //[].forEach 遍历数组 遍历数组的时候 修改了v 也会导致原数组被修改
          tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false);
    
          this.setData({
            tabs
          })
        }
      }
    

    image-20210714144821057

7.4 父向子传递数据

  • 在父组件引用子组件的标签上添加传递的数据

    image-20210714145406535

  • 在子组件中的.js文件中进行参数的接收

    image-20210714145439060

  • 在子组件的页面上进行使用参数测试

    <view>{{aaa}}</view>
    

将之前的tabs移动至父组件 子组件进行接收(更加灵活)

  1. 将tabs.js中定义的tabs数组剪切至demo7.js(父组件)中

    image-20210714150050490

  2. 在demo7.wxml(父组件)中向子组件传递tabs数组

    <Tabs tabs="{{tabs}}"></Tabs>
    
  3. 在tabs.js中进行tabs数组的接收定义

    image-20210714150302972

7.5 子向父传递数据

由于以上写法 不够灵活改变数据无法将父组件中的tabs进行修改

而是数据变化时在子组件中进行改变

  • 在Tabs.js中添加点击事件并把数据传递给父组件

    image-20210714151924158

    triggerEvent是组件中的触发事件

  • 在demo7.wxml(父组件)中绑定点击事件

    image-20210714152035598

  • 在父组件的.js文件中 自定义该点击事件

    //自定义事件 用来接收子组件传递的数据
    handleItemChange(e){
        //接收传递过来的参数
        const {index}=e.detail;
        let {tabs} = this.data;
        tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false);
        this.setData({
            tabs
        })
    },
    

    该方法与data同级

7.6 自定义组件插槽slot

在自定义组件Tabs中 之前所展示的是写死的内容

现在该为slot

  • image-20210714153541558

  • 在对应的父组件引用中进行数据的修改

    image-20210714153629107

  • 测试

    image-20210714153706376

    数据动态的显示

7.7 一些组件的补充属性

image-20210714154111249

8. 生命周期

分为 应用生命周期页面生命周期

8.1 应用生命周期

image-20210714154546206

image-20210714160127391

8.2 页面生命周期

image-20210714160326532

image-20210714162129748
image-20210714162154565

Page生命周期整体流程图

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值