微信小程序案例 3.9:模板实验博客

【微信小程序】模板消息推送(测试成功)。 note: 这几天想做微信小程序消息推送的功能,然后在网上找了好多教程,都没解决问题,官方文档写的教程由不够详细,所以走了好多弯路。 现在问题解决了,记录一下。 我在网上找的好多教程都不详细,虽然是贴代码出来了,但是好多都不说清楚是哪个文件的代码,真的很无语。 实现消息推送,需要先配置服务器域名、消息服务器推送配置。 请看我上一篇博客。 【微信小程序】消息推送服务器配置及服务器域名配置(记录坑) ... 阅读详情

一、实验目的

  1. 理解 WXML 模板template的作用,掌握模板的定义、导入、引用完整流程。
  2. 学会使用<template name="">定义模板,掌握import引入外部模板文件。
  3. 掌握is属性指定模板、data属性给模板传参,理解...对象展开运算符用法。
  4. 区分 import 与 include 的文件引用差异,理解模板独立作用域。
  5. 拓展作业:新增奥运冠军模板,渲染多条冠军信息,练习多模板在同一个文件中的定义与调用。

二、实验环境

微信开发者工具,新建小程序项目,不使用云服务、不使用模板。

项目目录结构

模板
├─template
│  └─template.wxml      //存放student、teacher、champion三套模板
├─pages
│  └─index
│     ├─index.js
│     ├─index.wxml
│     └─index.wxss
├─app.js
├─app.json
└─app.wxss

三、实验效果

页面红色居中标题:模板的定义和引用

  1. 输出 3 个学生信息:姓名、年龄、所学专业,横线分割;
  2. 输出 3 个老师信息:姓名、年龄、讲授课程,横线分割;
  3. 拓展作业输出 3 位奥运冠军信息:奥运冠军姓名、项目,横线分割。 所有条目均复用模板渲染,减少重复 wxml 代码。

四、核心知识点

  1. <template name="模板名称">:定义模板,name作为模板唯一标识,一个 wxml 文件内可以写多个 template 模板。模板内部使用{{}}预留动态数据占位。
  2. <import src="文件路径"/>:导入外部 wxml 模板文件,只会导入 template 标签内容,不会引入其他标签。

    import 有作用域:只会导入目标文件的 template,不会递归导入目标文件内部 import 的模板。

  3. <template is="" data=""/> 使用模板
    • is:指定要使用哪个模板。可以直接写固定模板名字,也可以使用{{变量}}动态选择模板。
    • data="{{...obj}}":...对象展开运算符,把对象的属性拆解,传入模板;也可以直接书写字面量对象传参。
  4. 模板拥有独立作用域:模板内部只能使用data传递过来的数据,不能直接访问页面 data 中的变量。
  5. import 和 include 区别
    • import:只引入<template>模板片段;
    • include:拷贝除<template>、<wxs>以外全部代码到当前位置。

五、完整代码实现

1. template/template.wxml(根目录 template 文件夹)

<!--template.wxml-->
<template name="student">
  <view>姓名:{{name}}</view>
  <view>年龄:{{age}}</view>
  <view>所学专业:{{major}}</view>
</template>

<template name="teacher">
  <view>姓名:{{name}}</view>
  <view>年龄:{{age}}</view>
  <view>讲授课程:{{course}}</view>
</template>

<!--作业新增:奥运冠军模板-->
<template name="champion">
  <view>奥运冠军姓名:{{name}}</view>
  <view>项目:{{sport}}</view>
</template>

2. pages/index/index.wxml

<!--index.wxml-->
<navigation-bar title="模板" back="{{false}}" color="black" background="#FFF"></navigation-bar>
<scroll-view class="scrollarea" scroll-y type="list">
  <view class="box">
    <view class="title">模板的定义和引用</view>
    <!--导入外部模板文件-->
    <import src="/template/template.wxml" />

    <!--动态指定模板名称渲染学生1-->
    <template is="{{temp01}}" data="{{...student01}}" />
    <view>---------------------------</view>

    <!--直接指定模板名称渲染学生2-->
    <template is="student" data="{{...student02}}" />
    <view>---------------------------</view>

    <!--直接传对象字面量渲染学生3-->
    <template is="student" data="{{name:'杨同学', age:21, major:'人工智能'}}" />
    <view>---------------------------</view>

    <!--动态指定模板名称渲染老师1-->
    <template is="{{temp02}}" data="{{...teacher01}}" />
    <view>---------------------------</view>

    <!--直接指定模板名称渲染老师2-->
    <template is="teacher" data="{{...teacher02}}" />
    <view>---------------------------</view>

    <!--直接传对象字面量渲染老师3-->
    <template is="teacher" data="{{name:'薛老师', age:38, course:'线性代数'}}" />
    <view>---------------------------</view>

    <!--作业新增:奥运冠军模板渲染-->
    <template is="champion" data="{{...champ01}}" />
    <view>---------------------------</view>
    <template is="champion" data="{{...champ02}}" />
    <view>---------------------------</view>
    <template is="champion" data="{{...champ03}}" />

  </view>
</scroll-view>

3. pages/index/index.js

// index.js
Page({
  data: {
    temp01: 'student',
    temp02: 'teacher',
    //学生数据
    student01: {
      name: '张同学',
      age: 19,
      major: '软件工程'
    },
    student02: {
      name: '李同学',
      age: 20,
      major: '计算机科学与技术'
    },
    //老师数据
    teacher01: {
      name: '王老师',
      age: 40,
      course: '智能终端开发技术'
    },
    teacher02: {
      name: '刘老师',
      age: 42,
      course: '物联网识别技术'
    },
    //作业新增:奥运冠军数据
    champ01:{
      name:'许海峰',
      sport:'男子自选手枪慢射'
    },
    champ02:{
      name:'刘翔',
      sport:'男子110米栏'
    },
    champ03:{
      name:'全红婵',
      sport:'女子10米跳台'
    }
  }
})

4. pages/index/index.wxss

/**index.wxss**/
page {
  height: 100vh;
  display: flex;
  flex-direction: column;
}

.scrollarea {
  flex: 1;
  overflow-y: hidden;
}

5. app.wxss(全局样式)

/**app.wxss**/
.box {
  margin: 20rpx;
  padding: 20rpx;
  border: 2rpx solid silver;
}

.title {
  font-size: 40rpx;
  font-weight: bolder;
  text-align: center;
  margin-bottom: 30rpx;
  color: red;
}

view {
  font-size: 30rpx;
}

6. app.json

{
  "pages": [
    "pages/index/index"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTitleText": "模板",
    "navigationBarTextStyle": "black"
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

六、实验步骤

  1. 创建新项目,选择不使用云服务,不使用模板。
  2. 在项目根目录新建template文件夹,创建template.wxml模板文件。
  3. 将上面代码分别复制到对应文件,确认全部标点符号为英文半角。
  4. Ctrl+S全部保存,开发者工具清缓存、重新编译。
  5. 在模拟器观察页面,查看学生、老师、奥运冠军全部信息渲染结果。

七、踩坑与问题总结

  1. 模板内容不显示:import src路径写错,注意开头/代表项目根目录。
  2. 模板拿不到数据:忘记写data属性传参;模板有独立作用域,不能直接访问页面 data。
  3. ...展开语法报错:必须写 data="{{...对象名}}",外层双大括号不能省略。
  4. 动态模板不生效:is属性的变量名要和 js 的 data 字段完全一致,区分大小写。
  5. import 不会递归导入:A 文件 import B,B 文件 import C,A 拿不到 C 内部的 template。
  6. navigation‑bar 警告:Skyline 渲染组件提示,不影响功能运行。

小提示:模板适合 UI 片段复用,如果逻辑复杂,优先使用小程序自定义组件 component。

八、实验小结

WXML 的 template 模板用于封装重复的 UI 片段,实现页面代码复用。本次实验完成 student、teacher、champion 三套模板,练习固定模板调用、动态模板调用、对象展开传参、字面量直接传参多种用法。区分import和include两种文件引入方式,理解模板的独立作用域。拓展作业新增奥运冠军模板,进一步巩固模板定义与引用流程。模板可以减少重复 wxml 代码,提升代码可维护性。

03:微信小程序案例2-2:本地生活 【代码】03:微信小程序案例2-2:本地生活。 阅读详情

相关推荐

微信小程序扫码报工案例分享

使用微信小程序结合PC端ERP完成工序扫码报工+扫码出入库,可以实现生产管理全流程自动化作业,使生产效率比之前手工操作有了质的飞跃。

tanghaiquan的博客 2121

案例3.9-模板-技术博客

在微信小程序开发中,我们经常会遇到结构相同、内容不同的重复页面结构,比如商品卡片、新闻条目、评论列表等。如果每处都复制粘贴相同的 WXML 代码,不仅代码冗余,后期修改样式时更是苦不堪言。微信小程序提供了 模板组件来解决这个问题:把重复的结构定义一次,在需要的地方多次引用。本文基于《微信小程序开发》教材案例3.9,完成一个演示模板定义和使用方法的小程序——展示学生和教师的信息;并在基础案例之上新增一个模板,展示中国奥运冠军及其所属项目。 3.2 定义模板(template/template.wxml) 在

2602_96911805的博客 190

Taro3.5微信小程序票务模板:含支付v3与选座逻辑

微信小程序是轻量级移动应用的重要载体,其跨端开发框架如Taro显著提升工程效率。Taro基于React语法封装小程序原生能力,支持多端统一构建,而微信支付v3接口作为合规支付核心,要求商户严格实现签名验签、证书管理与订单状态同步。在演出票务等强交互场景中,动态座位图渲染、多场馆数据隔离与RESTful API快速对接构成关键工程挑战。本方案提供开箱即用的Taro3.5票务基线模板,预置支付v3占位逻辑、可配置座位图组件及标准化API适配层,适用于需两周内交付MVP的中小型票务系统或校园活动平台。

weixin_30402231的博客 229

案例3.9 模板

姓名:{{name}}</text><text>年龄:{{age}}</text><text>专业:{{major}}</text></view>--教师模板--><text>姓名:{{name}}</text><text>年龄:{{age}}</text><text>授课课程:{{course}}

2601_96923004的博客 107

微信小程序票务模板:含支付v3、选座与电子票核销

微信小程序票务系统是基于原生框架构建的垂直业务解决方案,核心涵盖演出商品模型、多场次动态选座、微信支付v3接口集成及电子票二维码核销等关键技术。其原理依托小程序生命周期管理、云开发协同与前端状态机设计,具备高可复用性与生产就绪特性。技术价值体现在规避重复造轮子、缩短合规支付接入周期、保障库存原子性与时间冲突校验。典型应用于Livehouse、剧院、音乐节等场景的小程序快速上线。本模板特别强化了spdetail选座交互、pay页面v3签名封装及order状态闭环,是面向中小型文化演出团队的轻量级票务骨架。

weixin_42514540的博客 171

基于FPGA的DDS信号发生器

之前的博客讲到了DDS的基本原理,现在用Verilog代码实现DDS,能够产生四种波形,方波,三角波,正弦波,锯齿波,用按键来控制频率和选择波形。其中按键消抖模块来自小梅哥的FPGA自学笔记设计与验证这本书。 module DDS_Module( Clk, Rst_n, EN, Fword, Key1, Pword, DA_Clk, DA_Data ); input Clk...

qq_43534451的博客 9949

微信小程序案例 3.9 模板 template 的定义与引用

template 模板是小程序页面复用的基础方案,适合重复 UI 卡片。本案例实现两套独立模板,一套展示学生,一套展示奥运冠军,满足作业拓展要求。使用模板后,相同结构的卡片只需要写一次代码,后续修改样式只需要修改模板内部代码,大大简化开发维护。

jzszdd的博客 132

MaPLe: Multi-modal Prompt Learning

具体而言,我们在语言分支中附加可学习的上下文标记,并通过耦合函数显式地将视觉 Prompt 置于语言 Prompt 上,以建立它们之间的交互。使用 Prompt 来适应CLIP (语言或视觉) 的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。由此,提出了一种分支感知的多模态 Prompt,通过在两种模态之间共享提示来协调 CLIP 的视觉和语言分支。在 Prompt Tuning 中,必须采取多模态方法获得同时适应 CLIP 的视觉和语言分支,以实现上下文优化的完整性。

weixin_48907099的博客 1051

微信小程序之WXML 模板语法之数据绑定、事件绑定、wx:if和列表渲染

一、WXML 模板语法——数据绑定1、数据绑定的基本原则2、在 data 中定义页面的数据3、Mustache 语法(差值表达式)的格式4、Mustache 语法的应用场景5、动态绑定内容6、动态绑定属性7、三元运算8、算数运算二、WXML 模板语法-事件绑定1、什么是事件2、小程序中常用的事件3、事件对象的属性列表4、target 和 currentTarget 的区别5、bindtap 的语法格式6、在事件处理函数中为 data 中的数据赋值。

哥的时代,为你保驾护航 3287

squidpy 教程 1:在 AnnData 和 Squidpy 中导入空间数据

这些是 10x Genomics Visium 的 Space Ranger 输出提供的 keys,因此是第一个被采用的 keys。在这种情况下,我们假设空间坐标与像素具有相同的比例,因此我们将该值设置为 1。为此,我们将使用模拟数据集,并通过示例展示您应该注意的重要细节,以便利用 AnnData-Scanpy-Squidpy 生态系统的全部功能。并不是绝对必要的,但会节省您大量的输入,因为它是 Squidpy 和 Scanpy 的默认值。正如你所看到的,空间坐标被缩小了,图像被“放大”了。

🧑‍🎓 博士研究生在读 🔬 分享生物信息学、神经生物学方面的知识 💬 合作请在后台留言 2256

【气动弹性实战】基于Nastran与Patran的机翼颤振仿真:从模态分析到临界速度预测

本文详细介绍了基于Nastran与Patran的机翼颤振仿真全流程,从气动弹性问题解析、机翼建模技巧到模态分析与临界速度预测。通过实战案例展示如何利用SOL 145求解器进行颤振分析,并分享网格划分、材料属性设置等工程经验,帮助工程师有效解决飞行器设计中的气动弹性耦合问题。

weixin_33725722的博客 594

微信小程序之消息模板推送

微信小程序消息推送需要用户触发动作才能发送消息,比如用户提交订单、支付成功。一次只能发一条。也就是说只有用户点了小程序,操作了form表单提交然后生成一个formid ,才可以通过这条formid可以推送一条模板消息。也就是用户不点你小程序按钮,就不会推送。(微信真的是神坑。。。) 微信小程序消息推送分两种,一种直接从小程序的前端页面发起请求推送,另外一种在后台发起请求进行消息...

wy123123000的博客 1719

初学树莓派——(九)DHT11数据传入ONENET

目录 前言 DHT11实现本地温湿度监测 DHT11.py 接线图 效果图 温湿度数据上传至ONENET 新建产品 新建设备 ONENET.py 测试 Shell脚本配置 效果图 前言 本文分部分实现温湿度上传至OneNet云平台,本地数据监测,数据上传 新建一个文件夹,文件夹内包含DHT11.py、ONENET.py、tmp_data.txt、hum_data.txt DHT11实现本地温湿度监测 DHT11.py import RPi.GPIO as GPIO

会点灯的大力水手的博客 2612

微信小程序开发导航:精品教程+网友观点+demo源码(5月9日更新)

本文长期更新

u012421719的博客 1万+

33、密码学中的选择密文攻击与Cramer - Shoup加密方案

本文详细介绍了密码学中选择密文攻击的背景及其对Cramer-Shoup公钥加密方案的影响。该方案在决策Diffie-Hellman假设和抗碰撞哈希函数的基础上,能够有效抵御自适应选择密文攻击,并且其安全性无需依赖随机预言机模型。文章还分析了Cramer-Shoup方案的设计原理、加密与解密过程,以及其在标准假设下的安全性证明方法。此外,通过一系列相关练习,帮助读者进一步理解密码学概念如密文不可区分性、ElGamal加密、Goldwasser-Micali方案等。最后,文章展望了密码学的未来发展趋势,包括量子

vscode6remote的博客 99

视觉媒体通信作业记录(六)端到端的视频传输系统

将采集、编码、传输、显示各模块连接起来,形成一个端到端的视频通信系统,开发一个特色模块,将其加入系统;

weixin_45774698的博客 1967

【微信小程序】微信小程序swiper组件以及template模板的应用

微信小程序swiper及template使用 大家好!小白第一次写博客,希望大家多多鼓励!最近写了一个微信小程序,想对微信小程序里面的swiper组件和template模板,做出如下总结: swiper组件实现轮播图 首先,我们来看一下官方文档是如何介绍swiper组件? 微信小程序官方文档 我们选取swiper组件下的indicator-dots属性,interval属性以及autoplay属性进行展示 autoplay属性 :是否自动切换,属于boolean类型; interval属性 :自由切换时间

xuwenjie的博客 1300

GPU 运维实战:H100/H800/B300 换卡与压测

(烧多久、看什么、什么算合格)。文末还给了一个能直接跑的验收判定脚本,三个真实场景的裁决输出都在。

老韩的Linux云计算架构师进阶之路 270

Uni-App基于微信小程序的个人博客系统

移动互联网技术的飞速发展为个人博客系统的创新提供了强大的技术支持。随着智能手机和移动互联网的普及,人们越来越多地依赖于移动设备来获取信息、交流思想和分享生活。微信小程序作为一种轻量级的应用形式,无需下载安装即可使用,且能够充分利用微信这一拥有庞大用户基础的社交媒体平台的优势,使得个人博客系统得以更加便捷地触达广大用户。社交媒体平台的广泛应用对个人博客系统的开发产生了深远影响。微信作为国内最大的社交媒体平台之一,不仅拥有庞大的用户群体,还具备强大的社交功能和丰富的应用场景。

QQ860234001的专栏 989

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

微信小程序_模板与配置_day2

A. 使用WXML模板语法渲染页面结构 B. 使用WXSS样式装饰页面结构 C. 使用app.json对小程序进行全局性配置 D. 使用page.json对小程序页面进行个性化配置 E. 知道如何发起网络数据请求

ioncannontic的博客 772

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

微信小程序订阅消息功能实现

博客简介 本篇博客介绍如何自建服务器使用微信小程序的订阅消息功能,消息能力是小程序能力中的重要组成,为实现服务的闭环和更优的体验。使用方法步骤如下: 步骤一:获取模板 ID 步骤二:获取下发权限 步骤三:调用接口下发订阅消息 步骤一:获取模板 ID 在使模板的过程中,我们必须知道要获取的是哪个模板,微信官方为我们提供了这样的模板,我们需要订阅模板,并且获取模板的唯一标识id: 在微信公众平台...

One of thre_tigers的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

微信小程序实验2:个人名片制作

本文记录中国海洋大学《移动软件开发》实验2——名片小程序的设计与实现过程。项目基于微信小程序完成个人名片展示,包含 AI 生成的 16:9 名片头图、个人介绍和 GitHub 项目展示,并实现了项目链接复制与微信分享功能。通过本次实验,进一步熟悉了 WXML、WXSS、JavaScript 的分工,以及图片适配、数据传递、剪贴板 API 和小程序分享机制等基础开发方法。

2401_87918926的博客 240

三、模板与配置(下)

三、模板与配置8、WXSS模板样式-全局样式和局部样式9、全局配置-全局配置文件及常用的配置项10、全局配置-小程序窗口的组成部分11、全局配置-window12、全局配置-tabBar13、全局配置-案例:配置tabBar14、页面配置

B6665X的博客 1662

案例2.3盒模型-技术博客

本次案例 2.3 完整呈现了微信小程序中 CSS 盒模型的应用。通过三个盒子——标准盒模型演示盒、border-box 演示盒、以及致敬邓稼先先生的美化故事盒——既覆盖了盒模型核心知识,又完成了一次有温度的实践。博主:[11]发布时间:2026 年 9 月 8 日博客地址。

xueruanjiande11的博客 175

现代化个人博客系统 ModStartBlog v9.3.0 支持Laravel 9

系统内置模块市场,有行业应用、插件、云存储、云短信等功能模块,后台支持一键安装、启用、禁用、卸载,可快速搭建属于自己的系统应用。

qq_26450889的博客 564

免费微信登陆界面html模板,微信小程序:使用微信授权登录以及页面模板

1.login.html申请获取以下权限:获得你的公开信息(昵称、头像、地区及性别等)授权登录请升级微信版本2.login.css.container{display:flex;justify-content:center;}.header{margin:90rpx050rpx;border-bottom:1pxsolid#ccc;text-align:center;width...

weixin_42398629的博客 2618
上一篇: 微信小程序案例 3.3 生命周期函数
下一篇: 微信小程序案例 3.8:模块化实验博客
ZeroT_Too
博客等级 码龄71天 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值