微信小程序语法

一、WXML 模板语法

1. 数据绑定

通过双大括号 {{ }} 实现数据与视图的绑定,支持内容、属性和简单运算。

内容绑定:<view>{{ message }}</view>,其中 message 是页面 data 中的数据

属性绑定:<image src="{{ imgUrl }}"></image>,属性值需用双引号包裹

运算支持:

算术运算:{{ 1 + 2 }}

逻辑判断:{{ isShow ? '显示' : '隐藏' }}

字符串拼接:{{ 'Hello ' + name }}

2. 条件渲染

根据条件控制元素是否渲染,主要有 wx:if 和 hidden 两种方式。

wx:if 系列:

<view wx:if="{{ score > 90 }}">优秀</view>
<view wx:elif="{{ score > 60 }}">及格</view>
<view wx:else>不及格</view>
    

特点:动态创建/移除元素,适合条件不常变化的场景

hidden:

<view hidden="{{ isHide }}">内容</view>
    

特点:通过样式控制显示(display: none),适合频繁切换的场景

3. 列表渲染

通过 wx:for 循环渲染列表数据,配合 wx:key 提高性能。

基本用法:

<view wx:for="{{ list }}" wx:key="index">
  {{ index }}: {{ item.name }}
</view>
    

item 为当前项,index 为索引,默认名称可通过 wx:for-item 和 wx:for-index 自定义

wx:key 作用:标识列表项唯一性,推荐使用数据中的唯一字段(如 id),避免使用 index(频繁更新时可能出错)

4. 事件绑定

响应用户交互,通过 bind:事件名 或 catch:事件名 绑定,事件处理函数定义在页面 .js 中。

常用事件:tap(点击)、input(输入)、change(值改变)、longpress(长按)

基本用法:

<button bind:tap="handleTap">点击</button>

// 页面 .js 中
Page({
  handleTap(e) {
    console.log('点击事件触发', e)
  }
})

传递参数:通过 data-* 自定义属性,在事件对象中通过 e.currentTarget.dataset 获取

<button bind:tap="handleClick" data-id="123">点击</button>

// 页面 .js 中
handleClick(e) {
  console.log(e.currentTarget.dataset.id) // 输出 123
}
    

bind 与 catch 区别:bind 不阻止事件冒泡,catch 阻止事件冒泡

5. 表单双向绑定

通过 wx:model 实现表单控件与数据的双向绑定。

<input wx:model="{{ username }}" type="text" placeholder="请输入用户名" />
<checkbox wx:model="{{ isAgree }}" />同意协议

// 页面 .js 中
Page({
  data: {
    username: '',
    isAgree: false
  }
})

二、WXSS 样式语法

1. 基础语法

WXSS 基于 CSS 扩展,支持大部分 CSS 选择器和属性,新增 rpx 尺寸单位和样式导入功能。

2. 尺寸单位 rpx

rpx(responsive pixel)是自适应单位,规定屏幕宽度为 750rpx,适配不同设备。

示例:在 375px 宽的设备上,1rpx = 0.5px;在 750px 宽的设备上,1rpx = 1px。

<view style="width: 375rpx; height: 100rpx;"></view>

3. 样式导入

通过 @import 导入外部 WXSS 文件,路径为相对路径。

// 页面 .wxss 中
@import "../../common/common.wxss";

.container {
  padding: 20rpx;
}

4. 选择器

支持的选择器:类选择器(.class)、id 选择器(#id)、元素选择器(view、button 等)、后代选择器(.parent .child)、伪类选择器(:active、:focus)。

不支持通配符(*)、属性选择器([attr])等。

5. 全局与局部样式

全局样式:在 app.wxss 中定义,作用于所有页面

局部样式:在页面 .wxss 中定义,仅作用于当前页面,同名样式会覆盖全局样式(遵循 CSS 优先级)

三、页面与应用配置语法

1. 全局配置(app.json)

配置小程序全局属性,如页面路径、窗口表现、tabBar 等,格式为 JSON 对象。

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "navigationBarTitleText": "小程序示例",
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "/images/home.png",
        "selectedIconPath": "/images/home-selected.png"
      },
      {
        "pagePath": "pages/logs/logs",
        "text": "日志",
        "iconPath": "/images/log.png",
        "selectedIconPath": "/images/log-selected.png"
      }
    ]
  }
}

2. 页面配置(页面 .json)

配置当前页面的窗口表现,覆盖全局配置中 window 字段的同名属性。

{
  "navigationBarTitleText": "首页",
  "enablePullDownRefresh": true,
  "backgroundTextStyle": "dark"
}

四、WXS 脚本语法

1. 基本概念

WXS(WeiXin Script)是小程序的脚本语言,用于在 WXML 中处理数据,不能在 .js 中使用,语法类似 JavaScript 但有差异。

2. 使用方式

WXML 中嵌入 WXS:

<wxs module="m1">
  function formatPrice(price) {
    return '¥' + price.toFixed(2);
  }
  module.exports = {
    formatPrice: formatPrice
  };
</wxs>

<view>{{ m1.formatPrice(99) }}</view> // 输出 ¥99.00
    

引用外部 WXS 文件:

// utils/tools.wxs
function toUpperCase(str) {
  return str.toUpperCase();
}
module.exports = {
  toUpperCase: toUpperCase
};

// 页面 WXML 中
<wxs src="/utils/tools.wxs" module="tools"></wxs>
<view>{{ tools.toUpperCase('hello') }}</view> // 输出 HELLO
    

3. 与 JavaScript 差异

变量声明:仅支持 var,不支持 let、const

函数定义:仅支持 function 关键字,不支持箭头函数

作用域:与 .js 作用域隔离,不能调用小程序 API 或 .js 中定义的函数

数据类型:支持 number、string、boolean、object、array、function、date、regexp 等

五、网络请求语法

1. wx.request 基本用法

wx.request({
  url: 'https://api.example.com/data', // 必须为 HTTPS 协议
  method: 'GET', // 请求方法,默认 GET
  data: {
    id: 123
  },
  header: {
    'Content-Type': 'application/json'
  },
  success(res) {
    console.log('请求成功', res.data);
  },
  fail(err) {
    console.error('请求失败', err);
  },
  complete() {
    console.log('请求完成');
  }
});

2. 注意事项

需在微信公众平台配置合法域名(本地调试可关闭校验)

默认超时时间可通过全局配置 networkTimeout 调整

支持 Promise 封装,简化异步代码

function request(options) {
  return new Promise((resolve, reject) => {
    wx.request({
      ...options,
      success(res) { resolve(res.data) },
      fail(err) { reject(err) }
    });
  });
}

// 使用
request({ url: 'https://api.example.com/data' })
  .then(data => console.log(data))
  .catch(err => console.error(err));
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值