AngularJS:如何使用指令从具有特定 ng-model 的所有元素中动态删除 class?

AngularJS: How to use directives to dynamically remove class from all elements with specific ng-model?

简而言之,我试图获得的解决方案是从具有特定 class 名称或 ng-class 名称的每个元素中删除 class clickedng-model 名称,然后在单击的按钮上添加 class 名称。

我有一些元素在整个页面中使用 ng-repeat 重复。它们不在页面上的同一区域。 $scope 或指令是否可以从每个具有 ng-model 的元素或该页面上的每个子元素中删除 class?

指令:

app.directive('sibs', function () {
    return {
        link: function (scope, element, attrs) {
            element.bind('click', function () {
                element.parent().children().removeClass('clicked');
                element.addClass('clicked');
            })
        },
    }
});

此代码仅适用于 to/around 被单击元素的下一个元素。我正在尝试使 removeclass() 函数应用于页面上具有该 ng-model 名称的所有元素。

HTML:

<div>
    <div ng-repeat="a in MyArray" ng-show="isSet(a.ID)">
        <input sibs type="button" id="{{a.ID}}" ng-model="myModel" value="1" ng-click="selected(1)" />
        <input sibs type="button" id="{{a.ID+1}}" ng-model="myModel" value="2" ng-click="selected(2)" />
        <input sibs type="button" id="{{a.ID+2}}" ng-model="myModel" value="3" ng-click="selected(3)" />
        <input sibs type="button" id="{{a.ID+3}}" ng-model="myModel" value="4" ng-click="selected(4)" />
    </div>
</div>

<p> There's more code here inbetween these parts </p>

<div>
    <div ng-repeat="a in MyArray" ng-show="isSet(a.ID)">
        <input sibs type="button" id="{{a.ID}}" ng-model="myModel" value="1" ng-click="selected(1)" />
        <input sibs type="button" id="{{a.ID+1}}" ng-model="myModel" value="2" ng-click="selected(2)" />
        <input sibs type="button" id="{{a.ID+2}}" ng-model="myModel" value="3" ng-click="selected(3)" />
        <input sibs type="button" id="{{a.ID+3}}" ng-model="myModel" value="4" ng-click="selected(4)" />
    </div>
</div>

当然,我已经切换了一些元素和值,所以有些值可能无法理解为什么它们是那个值。

例如,第一个 ng-repeat 循环两次,第二个循环也是如此,如果我在第一个循环中单击任何按钮元素,然后在其他任何地方单击另一个按钮元素,我想能够清除 ng-modelmyModel 的所有按钮。然后,当从 class 中清除所有其他内容时,被单击的元素将添加 class。这可能吗?

或者我可以使用 ng-click 函数来实现吗?

如果 ng-class 可以做到这一点,请问有人可以提供编码解决方案吗?

对于这种情况。我认为您应该考虑使用 ngClass.

编辑:请尝试这个逻辑。虽然没有机会自己调试它

ng-class="{'clicked': condition(a, $first)}" //a = element from repeat

在你的 js 中

var prevElem;

$scope.condition(element, isFirst){
  var x = prevElem == element;
 if(isFirst $$ prevElem != null)
   x = false;
 if(!x)
   prevElem = element;
 return !x;
}

只需添加逻辑,使 prevElem 成为您在点击事件中点击的当前元素。