ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ember.js组件教程:如何编写可复用的HTML优先组件

Ember.js组件教程:如何编写可复用的HTML优先组件 Ember.js组件教程如何编写可复用的HTML优先组件【免费下载链接】ember.jsEmber.js - A JavaScript framework for creating ambitious web applications项目地址: https://gitcode.com/gh_mirrors/em/ember.jsEmber.js是一个用于构建雄心勃勃的 Web 应用的 JavaScript 框架而Ember.js 组件正是它最核心的设计哲学——通过可复用的 HTML 优先组件来组织界面。本文将带你从零基础出发用 5 步学会编写、复用和测试 Ember 组件让你快速掌握这套 HTML 优先的开发方式。为什么选择 Ember.js 组件Ember.js 把 UI 拆分成一个个独立、可复用的组件每个组件 一段模板 可选一段行为类。与传统JS 优先的写法不同Ember 的组件是HTML 优先的你先写模板长什么样需要时再添加类怎么工作。Ember 提供了三种组件写法新手可以按场景选择组件类型导入来源适用场景模板组件Template-onlyember/component/template-only纯展示、无逻辑的 UI如卡片、列表项Glimmer 组件glimmer/component需要状态、计算属性、生命周期逻辑Classic 组件ember/component维护老项目新项目不推荐核心建议默认优先使用模板组件或 Glimmer 组件。它们的源码分别位于 template-only.ts 和 packages/glimmer/component/src/index.ts官方文档就写在这些模块里。第一步一键生成新组件最快的创建方式是使用ember generate命令模板文件由项目内的 blueprints/component/index.js 蓝图自动生成# 创建纯模板组件推荐新手起点 ember generate component user-card --no-component-class # 创建带类行为的 Glimmer 组件 ember generate component user-card --component-class glimmer/component生成后你会在app/components/目录下看到新组件。默认格式是.gjs的 template tag 文件自 Ember 6.8 起成为默认格式其原始模板见templatename.gjstemplate {{yield}} /template命名约定很简单文件名用短横线user-card.gjs模板中调用时大写首字母UserCard /以此区分普通 HTML 标签。第二步编写 HTML 优先的模板组件HTML 优先意味着组件的核心就是一段真实 HTML参数通过前缀传入。例如一个纯模板的用户卡片// app/components/user-card.gjs template div classcard img src{{user.avatar}} alt{{user.name}} h3{{user.name}}/h3 p{{user.bio}}/p /div /template在其他地方调用它就像使用 HTML 标签一样自然UserCard user{{model.currentUser}} /模板组件没有类实例模板中只能访问传入的参数arg这使它极轻量——渲染引擎还能跳过多余的包装元素直接输出外层 HTML。这一优化的说明写在 template-only.ts 的模块文档中。第三步用块Block让组件更灵活当组件需要接受自定义内容时用{{yield}}开一个插槽template article classpost h2{{yield totitle}}/h2 {{yield}} /article /template调用时可以传入命名块像拼图一样把内容嵌进指定位置Post :title我的第一篇文章/:title p这里是正文……/p /Post进阶技巧✅ 用(has-block title)检查某个块是否存在不存在时提供默认内容✅ 用{{yield user.name}}把值传递给块接收方用as |name|接住✅ 所有命名块都必须显式命名未命名的内容默认是:default块第四步给组件添加 JavaScript 行为需要逻辑时在同一个.gjs文件里加一个继承自glimmer/component的类模板包在类里面——一个文件搞定// app/components/user-card.gjs import Component from glimmer/component; export default class UserCard extends Component { get displayName() { return ${this.args.user.firstName} ${this.args.user.lastName}; } template h3{{this.displayName}}/h3 {{yield}} /template }Glimmer 组件的常用 API 速查完整文档见 packages/glimmer/component/src/index.tsthis.args—— 所有传入参数的集合自动具备响应式追踪constructor(owner, args)—— 初始化状态服务注入与参数在此就已可用willDestroy()—— 组件移出 DOM 后清理定时器、订阅等资源this—— 在模板中引用类实例访问属性与方法第五步为组件编写测试组件可复用更要可信赖。用ember generate component-test生成测试文件由 blueprints/component-test/ 蓝图提供只需渲染组件、传入参数、断言结果test(it renders the user name, async function (assert) { await render(UserCard user{{this.user}} /); assert.dom(.card h3).hasText(Alice Smith); });测试模板同样支持.gjs格式与组件写法保持一致。最佳实践清单 默认从模板组件开始确实需要逻辑再升级为 Glimmer 组件避免过度设计组件放app/components/路由页面组件放app/templates/并与路由同名参数命名用业务语义user、fadeIn少用value、data这类模糊命名willDestroy中释放一切外部资源定时器、事件订阅、动画注册模板与类同文件.gjs保持组件自包含、易迁移相关源码导航模块说明packages/glimmer/component/src/index.tsGlimmer 组件核心类与完整 API 文档packages/ember/component/index.ts组件公开 API模板绑定、管理器注册packages/ember/component/template-only.ts模板组件声明与渲染优化说明blueprints/component/index.jsember generate component的生成逻辑blueprints/component-test/组件测试文件生成蓝图掌握以上五步你已经在用 Ember.js 最地道的 HTML 优先方式构建可复用组件了。从小的展示组件开始逐步加入块插槽与类逻辑你的代码库会越来越像积木一样清晰、好维护。【免费下载链接】ember.jsEmber.js - A JavaScript framework for creating ambitious web applications项目地址: https://gitcode.com/gh_mirrors/em/ember.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表