微信小程序 开发笔记

2022-04-01 15:14:02 浏览数 (2)

目录、文件解析

概览

一个 index文件夹 一个页面 index.wxml 相当于 html 页面 index.wxss 相当于 css 文件 index.json 全局配置

app.json

代码语言:javascript复制
{
  "pages":[
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "Weixin",
    "navigationBarTextStyle":"black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

pages 的第一项指向的页面为 首页 pages 中申明的页面 将被注册到 app中 window 整个小程序的窗口(全局应用)

tabBar

app.json

代码语言:javascript复制
{
  "pages": [
    "pages/song/song",
    "pages/index/index",
    "pages/logs/logs",
    "pages/play/play"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#FFC1C1",
    "navigationBarTitleText": "网易云小程序",
    "navigationBarTextStyle": "white",
    "enablePullDownRefresh": true,
    "backgroundColor": "#FFC1C1"
  },
  "tabBar": {
    "list": [
      {
        "text": "发现音乐",
        "pagePath": "pages/song/song",
        "iconPath": "images/music.png",
        "selectedIconPath": "images/music-active.png"
      },
      {
        "text": "发现音乐",
        "pagePath": "pages/song/song",
        "iconPath": "images/my.png",
        "selectedIconPath": "images/my-active.png"
      }
    ],
    "selectedColor": "#FF6A6A"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

注意: tabBar.list0.pagePath 不应该以 '/' 开头 只有在 tabBar.list.pagePath 中出现的路径才会 显示 tabBar

组件

view 标签 等同 div 标签 小程序有自己的标签 - 组件 每一个组件都有属性值

代码语言:javascript复制
<image src=""></image>
代码语言:javascript复制
<!-- 滑块标签 -->
<!-- 可以应用于轮播图,或者页面切换 -->
<swiper>
    <swiper-item></swiper-item>
</swiper>
代码语言:javascript复制
<!-- 轮播图模块 -->
<view class="banner-container">
    <swiper class="banner-list"
            indicator-dots="true"
            indicator-color="red"
            autoplay="true"
            interval="2000"
            circular="true">
        <swiper-item><image src="/images/swiper-1.jpg"></image></swiper-item>
        <swiper-item><image src="/images/swiper-2.jpg"></image></swiper-item>
        <swiper-item><image src="/images/swiper-3.jpg"></image></swiper-item>
        <swiper-item><image src="/images/swiper-4.jpg"></image></swiper-item>
    </swiper>
</view>

页面生命周期

页面 Page 实例的生命周期

Page

参考:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html

代码语言:javascript复制
//index.js
Page({
  data: {
    text: "This is page data."
  },
  onLoad: function(options) {
    // Do some initialize when page load.
  },
  onShow: function() {
    // Do something when page show.
  },
  onReady: function() {
    // Do something when page ready.
  },
  onHide: function() {
    // Do something when page hide.
  },
  onUnload: function() {
    // Do something when page close.
  },
  onPullDownRefresh: function() {
    // Do something when pull down.
  },
  onReachBottom: function() {
    // Do something when page reach bottom.
  },
  onShareAppMessage: function () {
    // return custom share data when user share.
  },
  onPageScroll: function() {
    // Do something when page scroll
  },
  onResize: function() {
    // Do something when page resize
  },
  onTabItemTap(item) {
    console.log(item.index)
    console.log(item.pagePath)
    console.log(item.text)
  },
  // Event handler.
  viewTap: function() {
    this.setData({
      text: 'Set some data for updating view.'
    }, function() {
      // this is setData callback
    })
  },
  customData: {
    hi: 'MINA'
  }
})

WXML 语法

参考:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/

数据绑定

代码语言:javascript复制
<!--wxml-->
<view> {{message}} </view>
代码语言:javascript复制
// page.js
Page({
  data: {
    message: 'Hello MINA!'
  }
})
代码语言:javascript复制
/**
* 页面的初始数据
* 小程序中没有 DOM 操作
*/
data: {
    // 轮播图图片地址
    bannerUrls: [
      '/images/swiper-1.jpg',
      '/images/swiper-2.jpg',
      '/images/swiper-3.jpg',
      '/images/swiper-4.jpg'
    ],
    // 轮播图属性
    indicatorDotsVar: "true",
    indicatorColorVar: "red",
    autoplayVar: "true",
    intervalVar:"2000",
    circularVar: "true",
    // 歌曲列表信息
    songs: []
},


/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
    // 向服务器发送请求
    wx.request({
      url: 'http://localhost:8080/tbMusic/musicList',
      method: 'GET',
      success: (res) => {
        console.log(res.data.data);
        // 给全局变量赋值
        this.setData({
          songs: res.data.data
        });
      }
    })
  },

注意:和 Vue 区别,

微信小程序中 在 data 中申明数据变量后,通过 this.setData() 的方式给变量赋值,而不是 Vue 中的数据data直接属于当前component,直接 this.songs, 无论赋值还是获取都是 this.songs

代码语言:javascript复制
this.setData({
    songs: res.data.data
});

微信小程序中每个 page ,这里的 this 指向 当前 page

这个 data 也仅仅属于当前 page ,

注意:setData() 不是 保存到 storage,而仅仅是 page.data

微信小程序中获取 data 中数据,this.data.songs

列表渲染

默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

代码语言:javascript复制
<view wx:for="{{array}}">
  {{index}}: {{item.message}}
</view>
代码语言:javascript复制
Page({
  data: {
    array: [{
      message: 'foo',
    }, {
      message: 'bar'
    }]
  }
})

使用 wx:for-item 可以指定数组当前元素的变量名,

使用 wx:for-index 可以指定数组当前下标的变量名:

代码语言:javascript复制
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
  {{idx}}: {{itemName.message}}
</view>

微信小程序中有 <block></block 自身不会生成任何标签,仅仅是容器,可以在它之上添加判断, 相当于 Vue 中的 <template></template> 不过注意到 微信小程序中 也有 <template></template> 可以发现 微信的关键词 wx: 而 Vue 为 v:,部分指令可以简写,例如 #slotName @eventName

block wx:for

类似 block wx:if,也可以将 wx:for 用在<block/>标签上,以渲染一个包含多节点的结构块。例如:

代码语言:javascript复制
<block wx:for="{{[1, 2, 3]}}">
  <view> {{index}}: </view>
  <view> {{item}} </view>
</block>

条件渲染

wx:if

在框架中,使用 wx:if="" 来判断是否需要渲染该代码块:

代码语言:javascript复制
<view wx:if="{{condition}}"> True </view>

也可以用 wx:elifwx:else 来添加一个 else 块:

代码语言:javascript复制
<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

block wx:if

因为 wx:if 是一个控制属性,需要将它添加到一个标签上。如果要一次性判断多个组件标签,可以使用一个 <block/> 标签将多个组件包装起来,并在上边使用 wx:if 控制属性。

代码语言:javascript复制
<block wx:if="{{true}}">
  <view> view1 </view>
  <view> view2 </view>
</block>

注意: <block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。

微信开发者工具 配置

关闭本地验证(开发测试用)

补充

单位rpx

1rpx = 2rpx

rpx 有适配作用

input

代码语言:javascript复制
<input class="search-input" type="text" bindinput="getKeyword" />

input 具有预定义的事件 bindinput,

bindinput 类似于 vue 中对于 input 的 v-model 双向数据绑定 v-model 实际上是 @eventHander 与 this.emit("eventName", pars) 联合的语法糖

CSS3 transform

参考:

  • css3中的变形(transform)、过渡(transtion)、动画(animation)
  • https://developer.mozilla.org/zh-cn/docs/web/css/transform

本文作者: yiyun

本文链接: https://cloud.tencent.com/developer/article/1970694

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

0 人点赞