【问题标题】:How to set the ng-class in order of item clicked?如何按点击项目的顺序设置 ng-class?
【发布时间】:2015-07-08 05:23:31
【问题描述】:

http://plnkr.co/edit/pUtuZy?p=preview

我有这 3 个边框类:

.border1 {
  border: 1px solid #66FFFF;
}

.border2 {
  border: 1px solid #33CCFF;
}

.border3 {
  border: 1px solid #0099FF;
}

我希望单击的第一个按钮获得border1 类,第二个按钮单击border2 类和border3 相同。

此外,我最终将有代码阻止用户选择超过 3 个按钮,因此用户将只能选择 3 个按钮。

当前标记逻辑:

<div class="tag"
     ng-class="{'border1':selected1, 'border2':selected2, 'border3':selected3}"
     ng-mouseover="showTagDetails(t)"
     ng-click="clickTag(t)">{{t.name}}</div>

但是,我不确定如何编写逻辑以确保第二个和第三个按钮获得适当的样式。如何解决这个问题?

$scope.clickTag = function(t) {

}

【问题讨论】:

  • 你的意思是先点击最后一个按钮会添加border1类,然后如果我点击中间会得到border2等?
  • @dfsq 是的!是的,按钮可能会被无序点击,但点击的第一个按钮仍然需要border1,第二个border2

标签: javascript css angularjs angularjs-ng-click angularjs-ng-class


【解决方案1】:

您可以在此处使用$index 来维护所选索引的列表。

标记

<div class="tag-container">
    <div class="tag" ng-class="selected.indexOf($index)!== -1 ? 'border'+ (selected.indexOf($index) + 1): ''" 
     ng-mouseover="showTagDetails(t)" ng-click="clickTag($index)">
        {{t.name}}
    </div>
    <tag-details tag="t"></tag-details>
</div>

代码

$scope.clickTag = function(index) {
  //first check length and then restrict duplicate index,
  if ($scope.selected.length < 4 && $scope.selected.indexOf(index) === -1) {
    $scope.selected.push(index);
  }
}

Plunkr Demo

【讨论】:

  • 嗯,在 Plunkr 中,我看到所有按钮现在都获得了边框样式,而不仅仅是 1。
  • @LeonGaban 你只想要前三个吗?那么其他按钮会申请什么类呢?
  • 是的,仅适用于前 3 个,稍后我将编写代码来阻止用户选择超过 3 个按钮,对不起,我应该将这些细节问题提出来。
  • @LeonGaban 这和你第一次问的完全不同
【解决方案2】:

按照你现在的做法,你只需添加一个变量

var selectionCount = 0

然后在你的函数中:

$scope.clickTag = function(t) {
    selectionCount++;
    t['selected' + selectionCount] = true;
}

然后在你的 HTML 代码中你需要写:

ng-class="{'border1': t.selected1, 'border2': t.selected2, 'border3':t.selected3}"

【讨论】:

猜你喜欢
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多