AngularJS addClass不是';行不通

AngularJS addClass不是';行不通,angularjs,addclass,Angularjs,Addclass,我一直在尝试通过AngularJS添加类,但代码似乎不起作用,奇怪的是addClass正在处理父菜单项,但不处理子项 我有一个嵌套的UL和LI,当我单击父LI ParentLi函数被调用时,它会向单击的LI添加一个“聚焦”类,这很好,但是当我单击嵌套的LI时,我调用childLi,我执行与父LI相同的操作,但没有添加类。我对Angular是个新手,我希望我能以正确的方式做到这一点 $scope.parentLi = function(event) { var liElement = an

我一直在尝试通过AngularJS添加类,但代码似乎不起作用,奇怪的是addClass正在处理父菜单项,但不处理子项

我有一个嵌套的UL和LI,当我单击父LI ParentLi函数被调用时,它会向单击的LI添加一个“聚焦”类,这很好,但是当我单击嵌套的LI时,我调用childLi,我执行与父LI相同的操作,但没有添加类。我对Angular是个新手,我希望我能以正确的方式做到这一点

$scope.parentLi = function(event) {
    var liElement = angular.element(event.target.parentNode);
    var allParentLiElements = document.getElementsByClassName('parent-dropdown');
    if (!liElement.hasClass('focused')) {
        angular.element(allParentLiElements).removeClass('focused');
        liElement.addClass('focused');
    } else
        liElement.removeClass('focused');
};

$scope.childLi = function(event){
    var liElement = angular.element(event.target.parentNode);
    var allParentLiElements = document.getElementsByClassName('child-dropdown');
    if(!liElement.hasClass('focused')){
        angular.element(allParentLiElements).removeClass('focused');
        $(event.target).closest('.parent-dropdown').addClass('focused');
        liElement.addClass('focused');
    } else
        liElement.removeClass('focused');
}
注意,我已经根据Jiam30给出的答案编辑了我的JSFIDLE代码

添加焦点类应该像活动类一样工作,即我刚才单击的菜单应该有焦点类,其他的不应该有,同样的方式,如果我将鼠标悬停在菜单项上并单击子项,则子项和父项都应该有焦点类


应避免操纵控制器中的元件

改用ng类(也可以使用ng repeat来避免HTML重复)。例如:

<li class="dropdown parent-dropdown" ng-click="parentLi()" ng-class="{'focused': isDropdownFocused}"></li>

更新的Fiddle:

应避免操纵控制器中的元素

改用ng类(也可以使用ng repeat来避免HTML重复)。例如:

<li class="dropdown parent-dropdown" ng-click="parentLi()" ng-class="{'focused': isDropdownFocused}"></li>

更新的Fiddle:

您是否考虑过使用ng类来实现纯角度方法?您是否考虑过使用ng类实现纯角度方法?我仅在实际代码中使用ng repeat,我只是从控制台复制了内容。您声明的项我是从服务器获取的,我使用了factory。我想在这里注意的另一点是,我的父菜单中有多个项,如Net,我还有5个,如果他们有聚焦类,我如何为他们移除它?存储6个布尔值,告诉你他们是否聚焦在$scope中的某个地方,并在你的控制器中随意修改这些布尔值。如果菜单的行为相同,您可能希望在指令中分解菜单。我不能这样做,问题是它是一个数据驱动菜单,菜单中的项目数可能会根据应用程序的不同而变化。我对angular不太了解,但作为参考,我使用此菜单,我仅在实际代码中使用ng repeat,我刚刚从控制台复制了内容。您声明的项我是从服务器获取的,我使用了factory。我想在这里注意的另一点是,我的父菜单中有多个项,如Net,我还有5个,如果他们有聚焦类,我如何为他们移除它?存储6个布尔值,告诉你他们是否聚焦在$scope中的某个地方,并在你的控制器中随意修改这些布尔值。如果菜单的行为相同,您可能希望将其分解为一个指令。我不能这样做,问题是它是一个数据驱动的菜单,菜单中的项目数量可能会根据应用程序而变化。我对angular不太了解,但供您参考,我使用此菜单