微信小程序语法

一、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));
    
<think>我们分析给定的代码片段:```javascript//function initPage(){ //returnnew Promise(function (resolve,reject){ //uni.getNetworkType({ //success: function(res) {////返回网络类型,有效值: wifi/2g/3g/4g/unknown(Android下不常见的网络类型)/none(无网络) //if (res.networkType=='none') {//return reject({ //show: true, //state: 'error',//message:'网络连接异常~'//}); //}else {//resolve(false); //}//} //}); //});// }兼容鸿蒙系统``` 这段代码使用了`uni.getNetworkType`方法,这是uni-app框架提供的API,用于获取网络类型。uni-app是一个使用Vue.js开发跨平台应用的框架,可以编译到微信小程序、支付宝小程序、百度小程序、字节跳动小程序、H5、App(包括iOS和Android)以及快应用等多个平台。在微信小程序中,uni-app的API是基于微信小程序的API进行封装的,因此`uni.getNetworkType`在微信小程序环境下实际上调用的是微信小程序的`wx.getNetworkType`方法。根据引用[1]和[2]的内容,微信小程序的JavaScript与浏览器中的JavaScript不同,它没有BOM和DOM对象,也不能使用Node.js的模块。但是,它提供了自己的API,如`wx.getNetworkType`。因此,这段代码使用了微信小程序的API(通过uni-app框架封装),属于微信小程序语法(更准确地说,是uni-app框架的语法,但uni-app在微信小程序端运行时会调用微信小程序的API)。同时,我们注意到代码中使用了`Promise`,这是ECMAScript6的特性,在微信小程序的JavaScript环境中是支持的(微信小程序的JavaScript运行环境支持ES6语法)。另外,代码中使用了`uni`对象,这是uni-app框架提供的全局对象,用于调用跨平台的API。结论:该代码使用了uni-app框架的API(`uni.getNetworkType`),而uni-app在微信小程序端会调用微信小程序的API,因此可以认为这段代码使用的是微信小程序语法(通过uni-app框架)。注意:虽然代码是为兼容鸿蒙系统而写,但鸿蒙系统上运行的uni-app应用,其API调用与微信小程序API调用方式一致,因为uni-app框架已经做了跨平台处理。 所以,答案是:该函数使用了微信小程序的API(通过uni-app框架封装)和语法。</think>### 判断代码是否使用微信小程序 API 和语法 您提供的代码**不是纯粹的微信小程序语法**,而是使用了 **uni-app 框架的 API**。以下是具体分析: #### 一、核心判断依据 1. **API 标识** 代码中使用了 `uni.getNetworkType()`,这是 uni-app 框架特有的跨平台 API: ```javascript uni.getNetworkType({ // ✅ uni-app 专属 API success: function (res) { ... } }) ``` 微信小程序原生 API 使用 `wx` 前缀: ```javascript wx.getNetworkType({ // ❌ 代码中未出现 success: function (res) { ... } }) ``` 2. **语法结构差异** | 特征 | 微信小程序 | 当前代码 | |---|---|---| | API 前缀 | `wx.` | `uni.` | | 返回值处理 | 支持 `success/fail/complete` | 相同 ✅ | | Promise 支持 | 需自行封装 | 已使用 Promise ✅ | | 网络类型值 | `wifi/2g/3g/4g/none` | 相同 ✅ | 3. **框架定位** 根据引用[2]: > 小程序的 JavaScript 由 **ECMAScript + 小程序框架 + 小程序 API** 组成 > [^2] 当前代码属于 uni-app 框架实现,而非微信原生框架。 #### 二、关键区别点 1. **跨平台特性** - `uni.` 前缀表明这是 uni-app 的跨平台 API - 在微信环境中运行时,`uni.getNetworkType()` 会自动转换为 `wx.getNetworkType()` 2. **Promise 封装** 微信小程序原生 API **不支持 Promise 返回**(需自行封装): ```javascript // 微信小程序需手动封装 function getNetworkType() { return new Promise((resolve, reject) => { wx.getNetworkType({ success: resolve, fail: reject }) }) } ``` 当前代码直接返回 Promise,符合 uni-app 的增强特性。 #### 三、代码兼容性说明 ```mermaid graph LR A[当前代码] --> B{运行平台} B -->|微信小程序| C[uni-app 转 wx.getNetworkType] B -->|鸿蒙系统| D[调用 @system.network] B -->|H5 浏览器| E[使用 navigator.connection] ``` ### 结论 该代码使用 **uni-app 框架语法**,不是原生微信小程序代码。其主要特征: 1. 使用 `uni.` 前缀的跨平台 API 2. 内置 Promise 封装(非微信原生支持) 3. 专为多平台(含微信/鸿蒙/H5)设计 > 在微信小程序环境中,此代码可通过 uni-app 框架转换为等效的 `wx.getNetworkType()` 调用[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值