如何在Angular中使用Web组件

475 阅读6分钟

[

Marius Bongarts

](medium.com/@mariusbong…)

马略-邦加茨

关注

6月14日

-

5分钟阅读

[

拯救

](medium.com/m/signin?ac…)

如何在Angular中使用Web组件

Web组件使我们能够完全独立于前端框架来开发。

Two shaking hands with overlay showing Angular logo on the left and Web Components logo on the right.

原始照片:Cytonn PhotographyfromPexels

许多开发者对Web组件消灭前端框架和库的想法感到威胁。这不会发生,因为这两种技术解决了不同的问题。但是,将它们结合起来才是真正的成功秘诀。

大多数使用Angular的人都不使用Web Components,但你可能想使用。

在我们深入研究我们的例子之前,让我们看看Web Components和Angular的目的。

Web组件的目的

Web组件是基于官方网络标准的可重复使用的客户端组件,并得到所有主要浏览器的支持。它们是封装 功能的一种很好的方式, ,与我们的代码的其他部分分开。不仅如此,你还可以在每个网络应用程序和网页中重复使用 它们。

它们的目的是编写强封装的自定义元素,以便到处使用。网络组件使我们能够完全独立于前端框架来开发。

网络组件的主要好处是我们可以到处使用它们。使用任何框架,甚至没有框架也可以。- vuejs.org

Angular的目的

Web Components为可重用的组件提供了强大的封装,而Angular则提供了一个声明式的库,使DOM与你的数据保持同步。

与Web Components的主要区别在于,我们只能在Angular应用程序中使用Angular组件。而另一方面,Web组件可以在任何地方使用。我们可以在React、Vue、Angular或任何其他网络应用中使用它。

作为一个开发者,你可以自由地在你的Web Components中使用React,或者在React中使用Web Components,或者两者都使用。- https://reactjs.org

当你的组件需要处理大量需要传递给子组件的数据时,Angular或任何其他前端框架都是不错的选择。

[

网络组件会取代前端框架吗?

它们是为了解决不同的问题而建立的。

medium.com

](medium.com/@mariusbong…)

构建一个Web组件

让我们继续建立我们的第一个Web组件,我们将把它集成到Angular应用程序中。

我们将保持简单,创建一个毫不费力的自定义元素。如果你对构建更复杂的Web组件感兴趣,请阅读我的系列文章。The Complete Web Component Guide.

下面是我们的hello-world 自定义元素的JavaScript代码。

在我们的HTML中加载了这些JavaScript代码,我们可以很容易地包括我们的组件,就像这样。

<hello-world></hello-world>

这将显示我们的 "**Hello World!"**标题。自己试试吧。这里是CodePen

在Angular中集成一个Web组件

让我们把我们的Web组件包含在一个正在运行的Angular应用程序中。为了方便起见,我们将去Stackblitz上的一个Angular启动项目。之后,我们创建一个文件hello-world.js ,并把上面的Web组件的代码放在里面。

[

你不需要React来创建一个可重用的按钮!

用Web组件代替

javascript.plainenglish.io

](javascript.plainenglish.io/you-dont-ne…)

接下来,我们进入Angular组件,导入我们的Javascript文件,包括我们Web组件的代码。

import ./hello-world

并将我们的自定义元素传递给我们的模板。

app.component.html

当保存我们的修改时,我们的组件还没有显示出来,我们得到的错误是 "'hello-world'不是一个已知的元素":

'hello-world'不是一个已知的元素

在这种情况下,Angular的错误信息是相当不错的。它为我们提供了两个选项。当阅读第二个选项时,我们可以得出,当使用Web Components时,我们需要将CUSTOM_ELEMENTS_SCHEMA 添加到@NgModule.schemas 。因此,让我们去我们的app.module.ts 文件,从@angular/core 中导入CUSTOM_ELEMENTS_SCHEMA ,并将其添加到schemas 阵列中。

CUSTOM_ELEMENTS_SCHEMA in app.module.ts

然后,瞧瞧!预览中显示了我们的Web组件。我们成功地将一个自定义元素集成到Angular中。下面是 最后的Stackblitz 的例子。

最后的思考

在Angular中使用Web组件很容易。构建可在整个前端框架中使用的可重复使用的组件会带来很多好处。我们已经了解到,在创建可重复使用的组件时,我们应该使用Web Components,以便在任何地方使用。当涉及到处理大量的数据时,Angular是个好办法。

我希望你喜欢阅读这篇文章。我总是很乐意回答问题,也愿意接受批评。欢迎在任何时候联系我😊

如果你想支持我的写作。 成为Medium会员.如果你这样做,我将得到一个小的佣金。谢谢!

[

用我的推荐链接加入Medium - Marius Bongarts

作为Medium会员,你的部分会员费将用于你所阅读的作家,而且你可以完全接触到每个故事...

medium.com

](medium.com/@mariusbong…)

关注我,不要错过我的下一篇文章。我写的内容包括:Typescript、Web Components、Frontend Frameworks、Software Design Patterns、Chrome Extensions,以及更多的主题🙏

关于我

我是埃森哲互动公司的一名软件工程分析师。我喜欢创造有价值的内容和产品,使人们的生活更轻松。比如说 网络亮点Chrome扩展可以让你在浏览器中访问的每一个页面或PDF上突出显示文本。你可以提供标签来分组你的研究,并非常容易地重新找到它。你所有的亮点都会同步到web-highlights.com上的相应网络应用。看看吧!

通过以下方式与我取得联系 访谈 或关注我 推特.

[

网络亮点 - PDF和网络亮点

在每个网站或PDF上创建亮点、书签、标签和文件夹。将您的想法和研究组织成一个有条理的结构。

chrome.google.com

](chrome.google.com/webstore/de…)

进一步阅读

[

用网络组件建立你自己的博客组合。基础知识

第1部分:自定义元素、阴影DOM和HTML模板

medium.com

](medium.com/@mariusbong…)

[

如何用Web组件建立一个Medium文本高亮显示的Chrome扩展?

我一直很喜欢Medium的荧光笔,它在选择文章中的文本时出现。我想,这将是一件好事...

medium.com

](medium.com/@mariusbong…)

[

完整的网络组件指南。自定义元素

成为未来网络开发的专家(第一部分)

medium.com

](medium.com/@mariusbong…)

[

高级TypeScript与代码挑战。Type Guards

学习TypeScript的高级特性并将其应用于实际的代码练习。

medium.com

](medium.com/@mariusbong…)