angular - 使用角度指令向宿主元素添加按钮
问题描述
我正在开发一个指令,其功能是向主机/父元素添加两个按钮。主机/父元素将是一个 textarea 元素。我尝试使用renderer2 createElement、appendChild 方法来实现。渲染器二正在创建这些按钮并像这样添加到宿主元素。
<textarea _ngcontent-c0="" appmarkdown=""><div _ngcontent-c0=""><button _ngcontent-c0="">Hello world</button></div></textarea>
但是这种方式按钮是不可见的。谁能帮我解决这个问题。
我的指令的代码。
enter code here import { Directive, Output, EventEmitter, Renderer2, ElementRef, OnInit } from '@angular/core';
@Directive({
selector: '[appMarkDown]',
host:{
'(keyup)': 'onKey($event.target.value)'
}
})
export class MarkDownDirective implements OnInit {
constructor(private renderer:Renderer2,private element:ElementRef) { }
@Output() valuechange:EventEmitter<any> = new EventEmitter();
private nativeElement : Node;
ngOnInit() {
this.nativeElement = this.element.nativeElement;
const div = this.renderer.createElement('div');
const button= this.renderer.createElement('button');
const text = this.renderer.createText('Hello world');
this.renderer.appendChild(button, text);
this.renderer.appendChild(div, button);
this.renderer.appendChild(this.nativeElement, div);
this.renderer.nextSibling(this.nativeElement)
}
onKey(event:KeyboardEvent){
this.valuechange.emit(event);
}
}
解决方案
<textarea></textarea>
因为,您正试图在using 属性指令旁边添加一个按钮。正确的方法是创建一个组件而不是创建指令。所有框架都在使用组件方法。
Attribute 指令改变 DOM 元素的外观或行为。
但在这里,你实际上是在改变结构本身。如果您只想借助属性指令来做某事,那么您应该将指令应用到<div>
,您可以在其中插入<textarea>
和插入<button>
其中。
如果您不想更改代码,那么您应该使用
ngOnInit() {
this.nativeElement = this.element.nativeElement;
const div = this.renderer.createElement('div');
const button= this.renderer.createElement('button');
const text = this.renderer.createText('Hello world');
this.renderer.appendChild(button, text);
this.renderer.appendChild(div, button);
this.renderer.insertBefore(this.element.nativeElement.parentNode, div, this.element.nativeElement.nextSibling);
}
这是工作解决方案的链接
推荐阅读
- django - 另一个数据库字段的外键的 Django 下拉字段
- python - Python - Selenium - 无法从 html 中抓取特定的文本内容
- javascript - 有什么办法可以停止多次调用一个函数?
- html - 如何在直到日历部分之后设置图像文本
- java - 使用 Spring Data ElasticSearch 4.x(没有 Jackson)的基于方法的序列化
- javascript - 如何在下面的jQuery代码中更改克隆行的ID
- java - XSLT 3.0 身份转换文档集合?
- python - 我在尝试加载 Pytoch 模型时遇到问题:“在模块中找不到身份”
- java - Usertransaction 不适用于 Oracle DB
- json - 如何从postgres中的json列获取数据