angular - 单击相邻元素时,如何创建自定义角度指令以显示和隐藏子元素?
问题描述
单击相邻元素时,如何创建自定义角度指令以显示和隐藏子元素?
因此,当单击 h2 时,我想使用自定义指令显示 custom_elem。
请记住,div 与 ngFor 重复。所以 div 的实例应该只在点击 h2 时显示子元素(custom_elem),而其他 div 实例的子元素(custom_elem)保持隐藏。
<div *ngFor="let item of items">
<h2 (click)="" >item.name</h2> // if I click here it will pass show or hide (true or false) values to the directive.
<custom_elem>somedata</custom_elem> //show these (then the directive will handle the display properties of these child elements)
<div>
看到我没有;想要动态添加任何新内容。
ngfor 本身已经在循环(在开始时)。只有我想要的是,当我单击 h2(使用自定义指令)时,我只想切换 (custom_elem) 的显示。
我们想要一个自定义指令。这样当我单击 h2 时,我可以将 true 或 false 值传递给指令,然后指令将处理 (custom_elem) 的显示属性
这样,显示或隐藏属性与相应元素的实例在本地绑定。& 未连接到 component.ts。
更新 div 与 ngFor 重复。h2 将始终可见。单击 h2 时,custom_element 显示打开和关闭。
这是需要的最终结果。当我点击 h2 时,我想显示相应的 custom_elem(它是 h2 的邻居)。
解决方案
好吧,它可以作为一个起点,但是您必须注意将发生的几种特殊情况:
- 添加/删除元素
- 没有孩子的标题
- 可以指定标题元素类型
基本上,这个Stackblitz 演示中显示了您所要求的初始版本,没有优化(因为这里发布的代码行太多 - 但我会尝试强调一些要点)。
该指令以它的名字命名appHideChildren
,它可以像这样使用:
<hello [appHideChildren]="true"></hello>
通过这样做,组件的所有子hello
组件,但h2
元素,将被隐藏(因为它被设置为true
)。这只是孩子们的初始状态。组件初始化后,单击标题将负责切换显示。
所做的是找到宿主组件的所有直接子组件:
<!-- $el is the host element -->
this._children = $el.querySelectorAll(`${$el.tagName}>*`);
然后,将事件侦听器添加到标头(h2
元素),并找到每个标头的以下兄弟姐妹并保留对它们的引用。事件侦听器遍历单击的标头的所有子项,切换其状态。显示属性的先前状态被存储以在必须显示组件时恢复。
推荐阅读
- go - gorilla cookie 会话是否会持续服务器重建?
- java - maven deploy 上传旧版本和当前版本
- excel - VBA - 保存文件 - 部分根据单元格值确定文件路径
- javascript - 从 html 访问 typescript 编译的 js
- java - 多个文件上传jsp & servlet
- php - 带有 Homestead 和 php-debug 的 Atom IDE 和 Xdebug Vagrant:无法使其暂停执行到断点并进行调试
- c# - 复杂的 Json 响应在 c# 类中未正确映射
- reactjs - React TypeScript 防止元素具有意外类型的子元素
- c# - PostSharp:从派生自公共基础的同一命名空间中的类中排除多播属性
- java - 一种将数字读入数组并返回到主函数的java方法。但我的代码返回错误。有人可以调查一下吗?