【问题标题】:Blazor WASM working with dom elements without using JavaScriptBlazor WASM 在不使用 JavaScript 的情况下处理 dom 元素
【发布时间】:2021-12-21 07:19:36
【问题描述】:

我正在将旧的 Web 表单应用程序移植到 Blazor WASM。 该应用程序使用了大量 JavaScript,我想知道如何最好地使用 Blazor 中的 DOM。

我们来看这个例子:

 <ul id="cii-tabmenu" class="nav nav-tabs">
    <li class="nav-item">
        <a class="nav-link active" data-tabIndex="0" href="#">Mål og investeringspolitik</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-tabIndex="1" href="#">Risk-reward-profil</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-tabIndex="2" href="#">Gebyrer</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-tabIndex="3" href="#">Tidligere resultater</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" data-tabIndex="4" href="#">Praktiske oplysninger</a>
    </li>
</ul>

我们需要以下内容才能拥有功能性标签条

  • 让标签被点击的点击处理程序
  • 在单击的选项卡上设置 Active 类并在前一个选项卡上将其删除的代码。

我可以轻松添加类似@onClick="TabClicked(index)" 的onclick 处理程序,但是如何设置活动类并删除之前选择的类?

我知道如何在 JavaScript 中做到这一点,但现在我在 Blazor 工作,并希望尽可能少地使用 js。

【问题讨论】:

    标签: javascript blazor-webassembly


    【解决方案1】:

    从长远来看,这不是最优雅的解决方案,但它应该可以帮助您更好地理解 blazor 范例:

    <ul id="cii-tabmenu" class="nav nav-tabs">
     <li class="nav-item">
      <a class="@(myawesometab[0])" data-tabIndex="0" href="#" @onclick="@(e => myawesometabclick(e, 0))">Mål og investeringspolitik</a>
     </li>
     <li class="nav-item">
      <a class="@(myawesometab[1])" data-tabIndex="1" href="#" @onclick="@(e => myawesometabclick(e, 1))">Risk-reward-profil</a>
     </li>
     <li class="nav-item">
      <a class="@(myawesometab[2])" data-tabIndex="2" href="#" @onclick="@(e => myawesometabclick(e, 2))">Gebyrer</a>
     </li>
     <li class="nav-item">
      <a class="@(myawesometab[3])" data-tabIndex="3" href="#" @onclick="@(e => myawesometabclick(e, 3))">Tidligere resultater</a>
     </li>
     <li class="nav-item">
      <a class="@(myawesometab[4])" data-tabIndex="4" href="#" @onclick="@(e => myawesometabclick(e, 4))">Praktiske oplysninger</a>
     </li>
    </ul>
    
    @code
    {
     private string[] myawesometab = new string[5] { "nav-link active", "nav-link", "nav-link", "nav-link", "nav-link" };
    
     private void myawesometabclick(MouseEventArgs e, int myawesometabnumber)
     {
      for (int i = 0; i < 5; i++)
      {
       myawesometab[i] = "nav-link";
      }
      myawesometab[myawesometabnumber] = "nav-link active";
     }
    }
    

    此外,由于 razor pages 使用与 winforms 类似的文件结构,您可能会尝试将整个项目更新为 razor pages,尽管我显然不了解项目的所有复杂性。

    【讨论】:

    • 感谢这绝对有效。我更喜欢一些更简洁的代码,方法和绑定更少。但它再次完成了工作
    • @MartinAndersen ,正如我所说,这不是最优雅的解决方案。也许你可以稍后再回来重构它。更要说明的是,更改 HTML 和 CSS 实际上只是更改了很多字符串。
    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2017-11-10
    • 2012-06-12
    • 2021-04-08
    相关资源
    最近更新 更多