我有一个功能:
var registerEnabledEvents = function ($scope, enabled, item, $ul, $li, nestedMenu, model, text, event, $, level) {
/// <summary>If item is enabled, register various mouse events.</summary>
if (enabled) {
var openNestedMenu = function ($event) {
removeContextMenus(level + 1);
var ev = {
pageX: event.pageX + $ul[0].offsetWidth - 1,
pageY: $ul[0].offsetTop + $li[0].offsetTop - 3
};
renderContextMenu($scope, ev, nestedMenu, model, level + 1);
};
$li.on('click', function ($event) {
$event.preventDefault();
$scope.$apply(function () {
if (nestedMenu) {
openNestedMenu($event);
} else {
$(event.currentTarget).removeClass('context');
removeContextMenus();
if (angular.isFunction(item[1])) {
item[1].call($scope, $scope, event, model, text)
} else {
item.click.call($scope, $scope, event, model, text);
}
}
});
});
$li.on('mouseover', function ($event) {
$scope.$apply(function () {
if (nestedMenu) {
openNestedMenu($event);
}
});
});
} else {
$li.on('click', function ($event) {
$event.preventDefault();
});
$li.addClass('display-none');
}
};
此函数取自此角度指令https://github.com/Templarian/ui.bootstrap.contextMenu 有一个上下文菜单。实际上,没有任何方法可以通过参数或条件隐藏菜单的列表项,因此我修改了指令。我改变了:
$li.addClass('disabled');
与
$li.addClass('display-none');
有效。如果某个商品返回false
,则不会显示该商品。问题是什么?那么&#34;启用&#34;如果上下文菜单的项目可见,则返回参数。如果你写下console.log()并显示它将获得的值(例如你有2个项目):
2016-07-08 12:54:36.851 contextMenu.js:141 false
2016-07-08 12:54:36.854 contextMenu.js:141 false
或
2016-07-08 12:54:36.851 contextMenu.js:141 true
2016-07-08 12:54:36.854 contextMenu.js:141 false
它当然取决于控制器中的条件。问题是如果所有项目都返回false,则它显示的上下文菜单没有项目,但它只显示一个&#34;白色空矩形&#34;。我需要的应该是,如果所有项目都返回false,我将类display-none添加到整个ul中,如下所示:
$ul.addClass('display-none');
但是如果至少有一个是真的,我只将css类添加到$ li项目中,只隐藏一个返回false。我该怎么做?谢谢
编辑:
这是我试过的
$scope.arrayValue = [];
$scope.arrayValue.push(enabled);
if($scope.arrayValue.every(enabled)) {
console.log("All true");
} else {
console.log("Not all true");
}
但我得到:false不是函数