使用 Angular 指令来扩展第三方组件。

使用 Angular 指令来扩展第三方组件。

在我目前使用的项目中 ķ irby 设计 UI 库和 kirby-form-field 组件无法处理 字首 或者 后缀 ,所以我必须找到一个解决方案来修改现有的 kirby-form-field 组件,以支持前缀或后缀。

有什么问题?

我的第一次尝试是在 kirby-form-field 中插入一个 div 元素,然后简单地将其与输入字段的左侧对齐。

Using the kirby-form-field in app.component.html

我的 div 元素在哪里?

Result of the above html

不幸的是,由于 kirby-form-field 组件使用多槽内容投影,我的 div 元素没有呈现到 dom。

kirby-form-field.component.html

如何添加我的 div 元素并扩展 柯比表单域 ?
只需在 Angular 中使用指令的力量!

1. 我们首先创建一个新的 前缀指令!

我们现在可以访问我的 div 的原生元素。我只需要 kirby-form-field 父实例组件将我的 div 添加回 dom。

下一步是什么?

  1. 获取 kirby-form-field 实例并将 div 元素添加回 DOM。
  2. 添加样式以将前缀正确放置在输入字段的左侧。
  3. 计算输入字段中的填充。

1. 获取 kirby-form-field 实例并将 div 元素添加回 DOM

我们需要 kirby-form-field 实例,以便我们可以将我的 div 元素插入到 dom 中。我们只需使用 Renderer2 来完成此操作。

完美,添加了我的 div 元素!

You can see my div element (test) is added above the input field!

4.让我们正确定位前缀!

这很简单;我们只需使用 position 、 transform 和 left css 属性来垂直对齐我的 div 元素并在左侧。

剩下的是计算前缀元素的宽度,并在输入字段中添加左填充,这样它们就不会重叠!

5. 计算输入字段中的填充。

首先,我们需要计算我的 div 元素的宽度,我们使用原生元素上的 getBoundingClientRect 方法来计算。我们使用 setTimeout 来确保 appendChild 和 getBoundingClientRect 之间有一个小的延迟,否则宽度将为 0。

接下来,我们获取输入的 native-element 并分配 padding-left 属性。

完美的!

Looks beautiful!

我希望您了解指令以统一的方式配置 3rd 方组件的有用性以及指令如何提供帮助 清理你的组件 .

我将任务留给您在同一指令中处理前缀和后缀,请在评论中告诉我您将如何解决它!

别忘了关注我 😉

Angular 指令很强大!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1542/34482917

posted @ 2022-08-29 17:35  哈哈哈来了啊啊啊  阅读(93)  评论(0编辑  收藏  举报