基于当前选定选项卡的动态导航栏突出显示

时间:2020-04-15 20:20:01

标签: javascript html css ruby-on-rails

我正在使用Rails,并且有一个Bootstrap导航栏。我需要这样做,以便根据您单击的导航栏选项卡(“主页”,“ OOTD”,“帐户”),它会以某种方式(例如白色文本)突出显示。我试图使用active甚至是应该切换它的功能来使它动态地工作,但是它不起作用。

我的application.html.erb,其中包含我的导航栏:

<!DOCTYPE html>
<html>
  <head>
    <title>Finalproj493</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark" style="width: 100%; height: 5vw;">
    <ul class="navbar-nav mr-auto nav">
      <li class="nav-item">
        <a class="nav-link" href="/welcome/index">Home</a>
      </li>
      <li class="nav-item 1">
        <a class="nav-link" href="/ootd">OOTD</a>
      </li>
      <li class="nav-item 2">
        <a class="nav-link" href="/account">Account</a>
      </li>
    </ul>
    </nav>

    <br>
    <br>

    <%= yield %>
  </body>
</html>

我试图使用is_active()函数动态切换(“滚动”方式),但是它不起作用。该函数位于我的application_helper.rb中,并且在我的导航栏中添加了函数调用(如上所示):

module ApplicationHelper

    def is_active(action)       
        params[:action] == action ? "active" : nil        
    end
end

也许我会采用错误的方式,但是有人可以建议一种简单的方法来将active导航栏样式纳入Rails吗?

1 个答案:

答案 0 :(得分:1)

您可以使用current_page?来设置活动的班级。您可以在app/helpers/application_helper.rb中创建一个方法:

def active_class(path)
 "active" if current_page?(path)
end

,您可以像这样使用它:

<li class="<%= active_class(welcome_index_path) %>">

current_page?将返回true并设置active类,如果当前请求URI是由path参数生成的。

您可以详细了解current_page? here