我有一些密码。
它工作正常,但我希望这段代码像往常一样工作。当我们点击外部的某个地方或点击内部的链接时,应该关闭浏览器。这个东西怎么落实?如果我不想使用Bootstrap的js,但只有css。
use yew::prelude::*;
#[function_component(App)]
pub fn app() -> Html {
let is_open = use_state(|| false);
let onclick = {
let is_open = is_open.clone();
Callback::from(move |_| is_open.set(!*is_open))
};
html! {
<main>
<div class="dropdown">
<a
class={classes!("btn", "btn-secondary", "dropdown-toggle")}
href="#" role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
{onclick}
>
{"Dropdown link"}
</a>
<ul class={classes!("dropdown-menu", (*is_open).clone().then(|| Some("show")))}>
<li><a class="dropdown-item" href="#">{"Action"}</a></li>
<li><a class="dropdown-item" href="#">{"Another action"}</a></li>
<li><a class="dropdown-item" href="#">{"Something else here"}</a></li>
</ul>
</div>
</main>
}
}
1条答案
按热度按时间ecfsfe2w1#
你需要做两件事:
1.将事件处理程序附加到“整个页面”,即
body
在单击时关闭您的浏览器1.停止将
click
事件从您的事件管理器传播到body
上的此事件处理程序。否则,事件也将冒泡到body
,您将获得一个打开+关闭,实际上不允许您打开事件。为方便起见,添加以下依赖项:
并按如下方式更改组件: