【问题标题】:Element targeting where onclick has occurred in Blazor在 Blazor 中发生 onclick 的元素定位
【发布时间】:2020-05-24 09:47:33
【问题描述】:

我有一个包含多个列表元素的 HTML 部分:

<li class="c-sidebar-nav-item c-sidebar-nav-dropdown @DropdownClass" @onclick="dropMenu">

<li class="c-sidebar-nav-item c-sidebar-nav-dropdown @DropdownClass" @onclick="dropMenu">

<li class="c-sidebar-nav-item c-sidebar-nav-dropdown @DropdownClass" @onclick="dropMenu">

目标是当单击其中一个元素时,会添加一个新类 c-show,然后在下面显示子菜单。

我在 blazor 中添加的代码是:

@code{
    bool MenuDroppedDown = true;
    string DropdownClass => MenuDroppedDown ? "c-show" : "";


    public async void dropMenu()
    {
        MenuDroppedDown = !MenuDroppedDown;
    }
}

但是这里的问题是,一旦一个元素被点击,那么c-show就会被添加到任何地方。

我怎样才能让它只影响发生 onclick 事件的元素?

【问题讨论】:

    标签: c# blazor


    【解决方案1】:

    将下面的代码复制到 Index 组件中,添加这个神奇的 css 类

    .c-show {
    background-color: red;
    }
    

    到位于 wwwroot 文件夹中的 site.css,然后运行代码

    <ul>
        @foreach (var item in items)
        {
             <li class="c-sidebar-nav-item c-sidebar-nav-dropdown @item.DropdownClass" @onclick="@(() => item.MenuDroppedDown = !item.MenuDroppedDown)" >click me</li>
        }
    
    </ul>
    
    
    @code{
    
    List<LiTag> items = Enumerable.Range(1, 10).Select(i => new LiTag { ID = i }).ToList();
    
    public class LiTag
    {
        public int ID { get; set; }
        public bool MenuDroppedDown { get; set; }
        public string DropdownClass => MenuDroppedDown ? "c-show" : "";
    }
    }
    

    请不要犹豫,问问题,因为这段代码是不言自明的,我没有费心解释我在做什么。

    【讨论】:

    • 请注意,Server Side Blazor 中的内联 lambda 表达式存在问题,这可能会导致网络流量爆炸。目前将Click 方法添加到“项目”并直接绑定@onclick=item.Click 更安全——它们都可以工作,但这种方法避免了网络流量问题。如果您也添加 @key=item,则可以加分,以便 Blazor 可以更准确地跟踪每个 li
    • @MisterMagoo 我很好奇这个问题。您能否分享一些有关它的信息(或 github 上的问题链接)?
    • @Guilherme 当然 - 给你github.com/dotnet/aspnetcore/issues/17886
    • 正如那个问题中描述的那样测试真的很容易,所以你可以确认或否认它对你来说是个问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2021-07-11
    • 1970-01-01
    • 2020-01-31
    • 2020-06-22
    相关资源
    最近更新 更多