我的子菜单有问题。当我点击子菜单时,它会在http请求后变为活动状态,但我希望它在http请求(页面刷新)之后保持展开状态.Menu结构如下所示。
<ul class="sidebar-navigation>
@foreach($parent as $parent)
<li><a href="#">{{$parent->name}}</a>
<ul>
@foreach($child as $child)
@if(isset($_GET['name']) && $_GET['name'] == $child->name)
<li class="active">
@endif
<a href="http:example.com?name=$child->name">{{$child>name)}}</a>
</li>
@endforeach
</ul>
</li>
@endforeach
</ul>
答案 0 :(得分:0)
这是一个想法,这就是我要做的事情来实现这种效果。我使用AdminLTE,您应该根据此代码更改您的代码,基本思路是判断当前路由如果路由需要打开侧边栏然后给一个类'主动' 到html标签。
HTML:
<div class="main-sidebar">
<div class="sidebar">
<ul class="sidebar-menu">
<li class="treeview {{ sidebar_open(['admin.roles.*']) }}">
<a href="#">
<i class="fa fa-user-secret"></i>
<span>角色管理</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="{{ route('admin.roles.index') }}"><i class="fa fa-circle-o"></i>角色列表</a></li>
<li><a href="{{ route('admin.roles.create') }}"><i class="fa fa-circle-o"></i>新建角色</a></li>
</ul>
</li>
</ul>
定义辅助函数:
<?php
if (!function_exists('sidebar_open')) {
function sidebar_open($routes = []) {
$currRoute = Route::currentRouteName();
$open = false;
foreach ($routes as $route) {
if (str_contains($route, '*')) {
if (str_contains($currRoute, substr($route, '-1'))) {
$open = true;
break;
}
} else {
if ($currRoute === $route) {
$open = true;
break;
}
}
}
return $open ? 'active' : '';
}
}