【发布时间】:2019-04-08 12:47:49
【问题描述】:
我有以下代码:
<li *ngFor="let item of Array let i = index">
<span>
<label (dblclick)="editTag($event,i)">
{{item.tag}}
</label>
<input type="text" #tagInput />
</span>
</li>
代码位于for 循环中。当我点击一个标签时,所有标签都应该被隐藏并且输入应该是可见的。目前,当我点击每个标签时,另一个保持打开状态。单击任何项目时如何隐藏另一个跨度?
我在 .ts 中有以下代码
@ViewChild('tagInput') tagNameTextInput: ElementRef;
editTag(event: any,index: any) {
//console.info(event);
this.tagNameTextInput.nativeElement.hidden = true;
this.tagNameTextInput.nativeElement.previousElementSibling.hidden = false;
let initialValue = event.target.childNodes[0].nodeValue.trim();
event.target.hidden = true;
event.target.nextElementSibling.hidden = false;
event.target.nextElementSibling.value = initialValue;
console.log(index);
// this.checkListNameHidden = true;
// this.checkListNameTextInput.nativeElement.value = initialValue;
// this.checkListNameTextInput.nativeElement.focus();
event.stopPropagation();
}
如何解决?
【问题讨论】:
-
你能用
ngFor发布你的完整html吗? -
用 for 更新了 html
-
你试过这个吗:
@ViewChildren('tagInput') tagNameTextInput: QueryList<ElementRef>而不是@ViewChild('tagInput') tagNameTextInput: ElementRef;。因为在你的 for 循环元素中 ref 并不保持唯一。 -
你能创建工作演示吗?您应该使用
NgIf隐藏元素,但尚不清楚您是否可以访问此侦听器中的其他数组元素 -
@Md.ParvezAlam,也可以试试
@ViewChildren代替@ViewChild。因为你有多个孩子。我已经更新了我的评论。
标签: javascript angular angular6 viewchild