angular - 如何在角度中使用指令添加组件
问题描述
我正在尝试在输入(或文本区域)元素中添加代码完成。类似于您将在现代 IDE 中看到的内容。
我已经有一个指令来寻找一些键盘快捷键来在我的输入元素中添加一些变量分隔符:
@Directive({
selector: '[askGenerateVariable]'
})
export class GenerateVariableDirective {
constructor(private element: ElementRef) { }
@HostListener('keydown', ['$event']) onKeyDown(e: KeyboardEvent) {
if (e.ctrlKey && (e.key === '1' || e.key === '2' || e.key === '3' || e.key === '4')) {
...
}
}
}
但现在我希望它添加另一个组件(在框中显示项目列表的组件)。
有没有办法做到这一点?我尝试将其作为组件并添加模板,但模板的内容没有显示在任何地方。可能是因为输入没有结束标签。
我有对元素的引用。我知道我可以向其中添加东西,但是如何添加另一个组件?
谢谢
解决方案
默认方法是将输入包装到组件中。因此,您可以简单地修改 DOM 并控制输入发生的任何事情。
保持你的方式,你可以尝试使用 css 的力量(见https://www.w3schools.com/howto/howto_css_dropdown.asp和https://css-tricks.com/css-attr-function-got-nothin-自定义属性/了解详细信息)。但是这种方法非常有限,所以我什至不会尝试。
我不建议从指令中进行任何 DOM 操作,因为它不是它的设计目的。
要查看如何将输入包装到具有自动完成功能的组件,您可以在此处查看材料团队是如何做到的https://github.com/angular/material2/tree/master/src/lib/autocomplete
推荐阅读
- amazon-web-services - 由于 ENI 问题,使用 aws_vpc 的 ECS 服务无法启动
- python - 这个将“字符串”视为“列表”的回文代码如何工作?
- python - AttributeError:模块'tagulous'在Django中没有属性'models'
- sql-server-2012 - 替换 SQL Server 2012 中的自联接
- reactjs - 无法实例化 GetFormErrorInterface,因为 GetFormErrorInterface [1] 不是多态类型
- python - 模块无法通过远程服务器连接调用
- c# - 加载列表
从具有通用方法的数据表 - css - 背景颜色没有出现
- python - 将excel文件工作簿合并到一个文件夹中
- sql-server-2012 - 我需要编写一个 SQL Server 查询。在单行中获取表的同名列值