gpt4 book ai didi

javascript - 如何将事件传递给 LitElement 中的 child

转载 作者:行者123 更新时间:2023-12-04 00:09:48 26 4
gpt4 key购买 nike

我想做一个下拉菜单,当点击输入时,菜单会显示一个切换开关,可以移除或放置“隐藏”类

我有这个方法

toggleMenu() {
this.classList.toggle("hidden");
}

这里是模板。

render(){
return html`
<input @click="${this.toggleMenu}" type="button">
<ul class="hidden">
<slot></slot>
</ul>
`;
}

最佳答案

一个简单的解决方案是向您的自定义元素添加一个属性,例如open ,这在您的 toggleMenu 中切换方法:

static get properties() {
return {
open: { type: Boolean },
};
}

constructor() {
super();
this.open = false;
}

toggleMenu() {
this.open = !this.open;
}

然后在你的render方法设置 <ul>class基于 this.open 值的属性:

render(){
return html`
<button @click=${this.toggleMenu} type="button">Toggle</button>
<ul class=${this.open ? '' : 'hidden'}>
<slot></slot>
</ul>
`;
}

您可以在下面的代码片段中看到它的工作原理:

// import { LitElement, css, html } from 'lit-element';
const { LitElement, css, html } = litElement;

class DropDownMenu extends LitElement {
static get properties() {
return {
open: { type: Boolean },
};
}

static get styles() {
return css`
ul.hidden {
display: none;
}
`;
}

constructor() {
super();
this.open = false;
}

toggleMenu() {
this.open = !this.open;
}

render(){
return html`
<button @click=${this.toggleMenu} type="button">Toggle</button>
<ul class=${this.open ? '' : 'hidden'}>
<slot></slot>
</ul>
`;
}
}
customElements.define('drop-down-menu', DropDownMenu);
<script src="https://bundle.run/lit-element@2.2.1"></script>

<drop-down-menu>
<li>Item 1</li>
<li>Item 2</li>
</drop-down-menu>

如果你想对 <ul> 应用额外的类你会想看看 classMap功能描述in the LitElement docs .


或者,您可以添加 reflect: trueopen属性声明,可让您显示或隐藏 <ul>单独使用 CSS,而不是设置它的 classrender :

static get properties() {
return {
open: {
type: Boolean,
reflect: true,
},
};
}

static get styles() {
return css`
ul {
display: none;
}
:host([open]) ul {
display: block;
}
`;
}

这是一个工作片段:

// import { LitElement, css, html } from 'lit-element';
const { LitElement, css, html } = litElement;

class DropDownMenu extends LitElement {
static get properties() {
return {
open: {
type: Boolean,
reflect: true,
},
};
}

static get styles() {
return css`
ul {
display: none;
}
:host([open]) ul {
display: block;
}
`;
}

constructor() {
super();
this.open = false;
}

toggleMenu() {
this.open = !this.open;
}

render(){
return html`
<button @click=${this.toggleMenu} type="button">Toggle</button>
<ul>
<slot></slot>
</ul>
`;
}
}
customElements.define('drop-down-menu', DropDownMenu);
<script src="https://bundle.run/lit-element@2.2.1"></script>

<drop-down-menu>
<li>Item 1</li>
<li>Item 2</li>
</drop-down-menu>

这两种都是常见的方法,最适合您的应用程序的方法取决于您的用例和个人偏好。

关于javascript - 如何将事件传递给 LitElement 中的 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59759198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com