AngularJs-在不禁用的情况下无法取消路线更改;展开菜单“;
图片: Html:AngularJs-在不禁用的情况下无法取消路线更改;展开菜单“;,angularjs,route-provider,Angularjs,Route Provider,图片: Html: // the ng-class allow the expansion of menu <li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-c
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
一些数据:
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
路由提供商“否则”操作:
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
场景[问题:
我在“收件箱”页面上,单击“图形”菜单,在单击某个选项之前,我的视图将恢复为默认的仪表板页面
我试图用$locationChangeStart阻止默认设置,但这会阻止菜单扩展,以便我可以看到子菜单
我想要的:要保留在我单击的任何页面(在本例中为收件箱页面),请单击任何其他具有子菜单(如图形)的菜单项,并且不要让我的视图从当前打开的收件箱视图中移出
提前感谢听起来您可能试图取消Bubble而不是preventDefault,但最好将expand元素移出锚定,以避免指令/事件冲突。那可能吗?我发现有几个问题。首先,它看起来像是在
vm.expandNav
中检查错误的url值。您正在检查url是否为空,但图形url是否设置为“#”
其次,您需要在检查成功后阻止默认设置
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
event.preventDefault()
告诉子a
标记它不应该访问它的href
。否则,您的单击事件将运行,但单击将继续向下级联,并将您的浏览器发送到http://
。这就是现在发生的事情,也是为什么你的或者会将其拾取并发送到默认仪表板的原因
此外,当您使用插值填充href
时,您应该使用ng href
:
<a ng-href="{{menuItem.url}}">
解决方案:
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
控制器中的正确代码:
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
正确的html:
// the ng-class allow the expansion of menu
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
// click to go to next route
<a href="{{menuItem.url}}">
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
vm.expandNav = function (item, url) {
if (url == '') {
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
vm.menuItems = [
{ name: "Dashboard", url: "/", icon: "fa-home", isActive: "active" },
{ name: "Inbox", url: "/inserts/inbox", icon: "fa-inbox" },
{ name: "Graphs", url: "#", icon: "fa-bar-chart-o",
subMenu:
[
{ name: "Flot Charts", url: "/inserts/flot" },
{ name: "Morris Charts", url: "/inserts/morris" },
{ name: "Inline Charts", url: "/inserts/inline-charts" }
]
}
.otherwise({
templateUrl: '/app/html/inserts/dashboard.html',
controller: 'RouteCtrl'
});
vm.expandNav = function (item, url) {
if (url === '#') {
event.preventDefault();
if (item !== vm.expandedItem) {
vm.expandedItem = item;
} else {
vm.expandedItem = null;
}
}
};
<ul>
<li class="{{menuItem.isActive}}" data-ng-repeat="menuItem in vm.menuItems" data-ng-class="{'': vm.expandedItem !== menuItem, 'expanded': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)" style="cursor: pointer;">
<a ng-href="{{menuItem.url}}">
<i class="fa fa-lg fa-fw {{menuItem.icon}}"></i>
<span class="menu-item-parent">{{menuItem.name}}</span>
<b data-ng-if="menuItem.subMenu.length > 0 ">
<em class="fa" data-ng-class="{'fa fa-expand-o': vm.expandedItem !== menuItem, 'fa fa-collapse-o': vm.expandedItem === menuItem}">
</em>
</b>
</a>
<ul data-ng-class="{'expanded': vm.expandedItem !== menuItem, 'expanded expandMe': vm.expandedItem === menuItem}" data-ng-click="vm.expandNav(menuItem, menuItem.url)">
<li data-ng-repeat="subMenu in menuItem.subMenu">
<a ng-href="{{subMenu.url}}" style="cursor: pointer;">{{subMenu.name}}</a>
</li>
</ul>
</li>
</ul>
我对你的提议一无所知。我想我的情况已经解释清楚了。