web-component - 在插槽元素内强制焦点事件
问题描述
我正在尝试关注一个在自定义元素中使用的插槽元素内部的元素。
在我的自定义元素内部,我查询 slot 元素,而不是使用方法 .assignedElements,它只是一个 div,然后我在该元素内部查询以找到我想要的输入。之后,我使用 .focus() 方法很好地聚焦输入。但这不起作用。
请让我知道是否有人可以提供帮助
我目前正在使用 Stencil 组件完成所有这些工作。
模板 Web 组件。
<tab-component> This is a web-component with a render method that returns <slot>
now I use tab-component inside of another web-component inside of it's render method, using a native yes, input.
老实说,我不能说更多,如果有人有任何尝试访问 Web 组件插槽内的输入的经验,请告诉我。
解决方案
一些东西:
- 确保您正在使用该
slotchange
事件。 assignedElements
返回一个元素数组,而不是单个元素。所以你必须把它当作一个数组。
下面的示例获取assignedElements
然后过滤掉我正在寻找的那个,然后调用focus()
该元素。
class MyEl extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'}).innerHTML="<slot></slot>";
let slot = this.shadowRoot.querySelector('slot');
slot.addEventListener('slotchange',
e => {
let el = slot.assignedElements().filter(
node => node.classList.contains('focus')
);
if (el) {
el[0].focus();
}
}
);
}
connectedCallback() {
}
}
customElements.define('my-el', MyEl);
<my-el>
<input type="text" placeholder="I am not focused"/>
<input type="text" placeholder="I am focused" class="focus"/>
</my-el>
推荐阅读
- android - 应使用哪些 API 在 Chrome 操作系统上执行设备和用户政策?
- python - 张量流2;如何使用预定义的稀疏权重架构创建自定义层/渐变?
- python - Lambda Python - 打印格式改进
- javascript - 代码在函数内部时不起作用
- python - 如何在 Python PyQt5 QTableView 中对齐(中心)行数据?
- java - 我想知道为什么我的“登录逻辑”总是错误的条件?
- numpy - 如何有效地计算 numpy 中的回转张量?
- c# - 使用 Xaml 设置默认值或组合框(尽管有绑定)
- c - 如何使用 strtok?
- vue.js - Bootstrap Vue datepicker 道具最大值失败,预期字符串,日期,得到日期