(Angularjs Metronic) 单击后侧边栏子菜单隐藏且不保持打开
(Angularjs Metronic) Sidebar Sub Menu hiding after click and not keep open
问题很简单,点击侧边栏后,子菜单短暂出现,然后又隐藏起来。
Layout.js(slideUp func.)被触发两次废话
我检查了 app.js 中的设置和菜单的 id。我确信我存储在数据库中的 id 和 sub id 工作正常。我检查了页面上的 classes 是否正常工作并正确放置。
但是 "open" class 及其关联的 "display block" 样式存在问题。如果我去修复它并留在 metronic layout.css 中,重要的打字仍然可见。但在它再次打开和关闭之前。
感谢您的帮助。
-Metronic.factory 在 app.js
var settings = {
layout: {
pageSidebarClosed: false, // sidebar menu state
pageBodySolid: false, // solid body color state
pageAutoScrollOnLoad: 1000 // auto scroll to top on page load
},
...
};
-MetronicApp.controller 在 app.js
MetronicApp.controller('SidebarController',
['$scope', 'authService', function ($scope, authService) {
$scope.SelectMenu = function (id) {
$scope.selectedMenu = id;
}
$scope.SelectChildMenu = function (id) {
$scope.selectedChildMenu = id;
}
$scope.LoadMenus = function () {
authService.UserMenus().then(function (response) {
$scope.menus = response;
Layout.initSidebar(); // init sidebar
},
function (error) {
alert("Error");
});
};
}]);
边栏视图 (.html)
<div class="page-sidebar navbar-collapse collapse">
<ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" ng-class="{'page-sidebar-menu-closed': settings.layout.pageSidebarClosed}" ng-controller="SidebarController" ng-init="LoadMenus()">
<li class="start" ng:repeat="m in menus" ng-class="{'active open': m.id==selectedMenu}">
<a href={{m.menuAction}} ng-click="SelectMenu(m.id)" >
<i class="icon-home"></i>
<span class="title">{{m.menuText}}</span>
</a>
<ul class="sub-menu" style="display: none;">
<li ng:repeat="child in m.children" ng-class="{'active': child.id==selectedChildMenu}" >
<a ui-sref="{{child.menuAction}}" >
<i class="icon-home"></i>
<span class="title">{{child.menuText}}</span>
</a>
</li>
</ul>
</li>
</ul>
</div>
layout.js(Metronic 主题全局脚本)
if (sub.is(":visible")) {
jQuery('.arrow', the).removeClass("open");
the.parent().removeClass("open");
debugger;// **This is also triggered immediately after a single click**
sub.slideUp(slideSpeed, function () {
if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {
if ($('body').hasClass('page-sidebar-fixed')) {
menu.slimScroll({
'scrollTo': (the.position()).top
});
} else {
Metronic.scrollTo(the, slideOffeset);
}
}
handleSidebarAndContentHeight();
});
} else if (hasSubMenu) {
debugger; //first visit here normally
jQuery('.arrow', the).addClass('open');
the.parent().addClass('open');
sub.slideDown(slideSpeed, function () {
if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {
if ($('body').hasClass('page-sidebar-fixed')) {
menu.slimScroll({
'scrollTo': (the.position()).top
});
} else {
Metronic.scrollTo(the, slideOffeset);
}
}
handleSidebarAndContentHeight();
});
}
e.preventDefault();
});
CSS 流日志(工作和非工作版本)
Working version:
Broken version
删除 ng-controller="sidebarController" 表达式,如果其他视图有(main.html 和我一样)
问题很简单,点击侧边栏后,子菜单短暂出现,然后又隐藏起来。
Layout.js(slideUp func.)被触发两次废话
我检查了 app.js 中的设置和菜单的 id。我确信我存储在数据库中的 id 和 sub id 工作正常。我检查了页面上的 classes 是否正常工作并正确放置。
但是 "open" class 及其关联的 "display block" 样式存在问题。如果我去修复它并留在 metronic layout.css 中,重要的打字仍然可见。但在它再次打开和关闭之前。
感谢您的帮助。
-Metronic.factory 在 app.js
var settings = {
layout: {
pageSidebarClosed: false, // sidebar menu state
pageBodySolid: false, // solid body color state
pageAutoScrollOnLoad: 1000 // auto scroll to top on page load
},
...
};
-MetronicApp.controller 在 app.js
MetronicApp.controller('SidebarController',
['$scope', 'authService', function ($scope, authService) {
$scope.SelectMenu = function (id) {
$scope.selectedMenu = id;
}
$scope.SelectChildMenu = function (id) {
$scope.selectedChildMenu = id;
}
$scope.LoadMenus = function () {
authService.UserMenus().then(function (response) {
$scope.menus = response;
Layout.initSidebar(); // init sidebar
},
function (error) {
alert("Error");
});
};
}]);
边栏视图 (.html)
<div class="page-sidebar navbar-collapse collapse"> <ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" ng-class="{'page-sidebar-menu-closed': settings.layout.pageSidebarClosed}" ng-controller="SidebarController" ng-init="LoadMenus()"> <li class="start" ng:repeat="m in menus" ng-class="{'active open': m.id==selectedMenu}"> <a href={{m.menuAction}} ng-click="SelectMenu(m.id)" > <i class="icon-home"></i> <span class="title">{{m.menuText}}</span> </a> <ul class="sub-menu" style="display: none;"> <li ng:repeat="child in m.children" ng-class="{'active': child.id==selectedChildMenu}" > <a ui-sref="{{child.menuAction}}" > <i class="icon-home"></i> <span class="title">{{child.menuText}}</span> </a> </li> </ul> </li> </ul> </div>
layout.js(Metronic 主题全局脚本)
if (sub.is(":visible")) { jQuery('.arrow', the).removeClass("open"); the.parent().removeClass("open"); debugger;// **This is also triggered immediately after a single click** sub.slideUp(slideSpeed, function () { if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) { if ($('body').hasClass('page-sidebar-fixed')) { menu.slimScroll({ 'scrollTo': (the.position()).top }); } else { Metronic.scrollTo(the, slideOffeset); } } handleSidebarAndContentHeight(); }); } else if (hasSubMenu) { debugger; //first visit here normally jQuery('.arrow', the).addClass('open'); the.parent().addClass('open'); sub.slideDown(slideSpeed, function () { if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) { if ($('body').hasClass('page-sidebar-fixed')) { menu.slimScroll({ 'scrollTo': (the.position()).top }); } else { Metronic.scrollTo(the, slideOffeset); } } handleSidebarAndContentHeight(); }); } e.preventDefault(); });
CSS 流日志(工作和非工作版本)
Working version:
Broken version
删除 ng-controller="sidebarController" 表达式,如果其他视图有(main.html 和我一样)