使用 Angular 构建可跨框架使用的 Web Components 教程

2026-02-07 0 683

当前前端开发领域,组件能在不同框架通用成为一大焦点。许多优秀的组件却受限,仅适用于个别框架,这让人感到些许遗憾。然而,Web组件标准的推出,为我们带来了新的曙光。

一组件的局限性与Web的优势

经常遇到的情况是,出色的组件往往只能在特定框架中应用,这无疑缩小了它们的使用范围。在具体的项目开发过程中,不同团队可能会选择不同的框架,比如vue或react等。然而,Web组件遵循的是一种标准的HTML组件规范,它打破了框架的束缚,使得组件可以在不同框架间通用。设想一下,如果某个日期选择器组件仅限于框架内部使用,那么在vue项目中就需要重新开发相似的功能,这无疑会耗费大量时间和资源。而采用Web组件后,这种情况就能得到避免,无论是框架内还是框架外,都可以灵活使用。

大型企业项目开发常需多团队协作,各团队所倾向的框架各不相同。若能借助Web组件实现组件间的共享,无疑将大幅提升开发速度,并显著降低重复开发的工作负担。

import { MatNativeDateModule } from '@angular/material/core';
import { MatDatepickerModule } from '@angular/material/datepicker';

二创建基本的应用

  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatDatepickerModule,
    MatNativeDateModule,
  ],

首先,我们需要通过运行“ngnew–stylescss–falsem”这个指令来搭建一个应用。这过程可能需要一些时间,所以请耐心等待。这是搭建应用的基础操作,前提是您已经掌握了框架的相关知识,并且已经搭建好了开发所需的基本环境。若您未安装适当的环境或对框架知识不够熟悉,可能会在此时遇到障碍,进而影响后续步骤的进行。

<input [matDatepicker]=\"picker\" />
<mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>

安装完基础环境后,正确执行指令极为关键。若遇到语法失误或版本不兼容等问题,都可能干扰系统正常运作。这时,需仔细核对指令是否准确,以及环境变量是否正确配置等因素。

三安装依赖库与创建日期选择器组件

我们需要用ngadd@/来安装Web所需的库,这是构建Web组件的基础。接着,我们安装组件库,并在app..ts文件中导入相关模块。这样,我们便可以开始尝试制作日期选择器组件了。这个过程有点像拼装机械模型,每一个部件都必须安装得恰到好处,才能确保整个组件能够正常工作。

// app.module.ts
@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    MatDatepickerModule,
    MatNativeDateModule,
  ],
  providers: [],
  bootstrap: [],
})
export class AppModule implements DoBootstrap {
  constructor(injector: Injector) {
    const dateComponent = createCustomElement(AppComponent, { injector });
    customElements.define('m-date', dateComponent);
  }
  ngDoBootstrap(appRef: ApplicationRef): void {}
}

启动yarnstart–open后,浏览器会自动打开并展示日历图标。点击图标,会出现日期选择界面。这说明我们成功创建了一个基础日期选择组件。每一步操作都需精确无误,否则可能会导致结果不理想。例如,若依赖库安装出现问题,组件将无法正常展示。

四将组件封装为Web组件

在构造函数中,通过使用@/方式,我们能够打造Web组件,并依照Web规范中的相关要求进行元素的注册。这一步骤对于将普通组件转变为Web组件至关重要。它好比将地方特色产品进行加工和包装,目的是为了便于在更广泛的市场进行销售。


  <body>
    <m-date></m-date>
  </body>

每一步都必须严格按照规定来执行。若出现失误,组件可能无法正确注册,进而无法在其他场合应用。这就像在包装时出了差错,使得特产变质,便难以在异地销售。

五使用Web组件

删除其中内容后,app-root不会自动加载。因此,我们需要在index.html中移除app-root标签,并加入m-date标签以启用先前注册的组件。值得注意的是,修改index.html后页面不会自动更新,需手动按F5刷新。刷新后,若能看见日历图标并能点击弹出日期选择窗口,则说明操作无误。

这个过程对我们细致入微的要求很高。一不小心忘记手动刷新,或者添加元素出错,就无法达到理想的效果。就好比拼图缺少一块或者放错了位置,都无法完成。

六在Linux编译打包Web组件


Initial Chunk Files           | Names         |  Raw Size | Estimated Transfer Size
main.467a0ab37287e536.js      | main          | 365.53 kB |                86.67 kB
styles.af496c625d1d99e8.css   | styles        |  73.07 kB |                 7.55 kB
polyfills.a1cc02388ba313f2.js | polyfills     |  33.06 kB |                10.65 kB
runtime.68788f74f641e937.js   | runtime       |   1.03 kB |               595 bytes

                              | Initial Total | 472.68 kB |               105.45 kB

编译yarnbuild会产生若干文件,其中包括三个JavaScript文件和一个CSS文件。若直接发布,用户导入会感到不便。在Linux系统中,可以通过执行特定命令将文件合并。合并完成后,只需在HTML文件中引入一个JavaScript文件和一个CSS文件,即可实现日期选择器的功能。

这种做法能增强组件使用的便捷度。然而,在Linux系统中,若命令输入有误,则无法顺利进行。以文件合并命令为例,一旦输入错误,便无法达到预期的文件合并效果。

最后有个小问题想请教大家,在使用不同框架的前端组件时,你们有没有遇到什么困难?欢迎在评论区留言交流。同时,也希望各位能点个赞,把这篇文章转发出去。

cat dist/m/*.js > main.js
cat dist/m/*.css > main.css

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 使用 Angular 构建可跨框架使用的 Web Components 教程 https://www.zuozi.net/64561.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务