当前位置: 首页 > news >正文

抖音小程序开发:ttml和传统html的区别

1 传统 Web 中 HTML 的角色

HyperText Markup Language:用来描述页面结构——标题、段落、图片、表单……

只负责“放什么元素、排在什么层级”,真正的行为靠 JS,视觉靠 CSS。

<!-- 传统网页:结构 + class 交给 CSS -->
<div class="header"><h1>Hello Web</h1><button id="incBtn">+</button><span id="count">0</span>
</div><script>// 纯 JS 手动取 DOM / 改文本let n = 0;document.getElementById('incBtn').onclick = () => {n++;document.getElementById('count').innerText = n;};
</script>

2 TTML 相对 HTML 的区别

能力TTML 特有举例对比
数据插值{{variable}} 直接把 JS data 渲染进模板<text>{{count}}</text>
事件声明式绑定bindtap="add" 只写函数名,不内嵌 JS<button bindtap="add">+</button>
条件 / 列表指令wx:if wx:for<view wx:for="{{list}}">{{item}}</view>
组件标签集<swiper> <scroll-view> 等对接原生能力<swiper autoplay="{{true}}">…</swiper>
安全沙箱模板层不能直接写 <script>事件必须跳到 *.js 文件
rpx 单位与屏幕宽度自适应的长度单位width: 750rpx = 全屏

本质:TTML = HTML 结构 + 小程序框架指令 + 数据/事件绑定语法,让 UI 与 JS data 形成自动同步。

对照示例:计数器

A. HTML 版(手动操作 DOM)

<button id="incBtn">+</button>
<span id="count">0</span>
<script>let n = 0;incBtn.onclick = () => { count.innerText = ++n; };
</script>

B. TTML + TTJS 版(声明式 + 双向)

<!-- counter.ttml -->
<button bindtap="add">+</button>
<text>{{count}}</text>
// counter.js
Page({data: { count: 0 },add() { this.setData({ count: this.data.count + 1 }); }
});

差别

  • TTML 无需直接改 DOM,调用 setData ➜ 框架自动把 count 更新到 {{count}} 位置。

  • 点击事件只写 bindtap=“add”,函数体放在 JS,模板更纯净。

模式需求更新流程
原生 DOM手写 document.*直接改 DOM(命令式)
小程序 TTML / React 等写模板 {{count}} + this.setData({count})框架比对数据差异自动改视图(声明式)

优点:

逻辑与视图分离,代码量大幅减少;并且这样可以在框架内部做批量更新、虚拟 DOM diff,性能可控,且不易产生 “忘了同步 UI” 的 Bug

代价:
必须走框架限定的 API(如 setData),不能直接任意操作 DOM。

http://www.lryc.cn/news/573588.html

相关文章:

  • 深入解析C#数组协变与克隆机制
  • Android NDK—JNI基础
  • Linux(3)
  • Kafka 原理与核心机制全解析
  • Vite 原理深入剖析
  • 【PyTorch革命】机器学习系统编程模型的演进之路
  • 从C++编程入手设计模式——命令模式
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维智能决策指南
  • 8.特征提取与直方图
  • MATLAB GUI界面设计 第二章——APP Designer操作正式入门
  • Linux 下的 socket
  • Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档
  • 【机器学习的五大核心步骤】从零构建一个智能系统
  • STM32-GPIO-推挽输出详解
  • 深入解析Flink Local模式启动流程源码:揭开作业初始化的神秘面纱
  • Ubuntu20 搭建 Java、Redis、Nginx
  • GO 语言学习 之 helloWorld
  • 2025年SVN学习价值分析
  • react day.js使用及经典场景
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(3)- 消费者 ID 对负载均衡的影响
  • 微前端MFE: 通过共享模块通信(模块联邦Module Federation)
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维都是什么?
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • 【Nature Communications】超高介电常数材料 Hf0.5Zr0.5O2(HZO)
  • Oracle 11G RAC修改public ip vip private ip
  • 【数据治理】要点整理-《数据管理能力成熟度评估模型》国家标准(GB/T 36073—2018)
  • Linux的文件权限
  • 16_设备树中的remote-endpoint演示基于视频字符设备Linux内核模块
  • python源码:执行pdf合并/分页/图片管理功能
  • 计算机网络课程设计--基于TCP协议的文件传输系统