【问题标题】:AngularJS: How to addClass/removeClass with passed in id as $scope variable?AngularJS:如何将 id 作为 $scope 变量传递给 addClass/removeClass?
【发布时间】:2016-11-28 19:54:46
【问题描述】:

在我的代码前面,我将一个元素 ID 传递到我的代码中并为其设置一个变量。之后,我尝试从具有该 ID 的元素中 removeClass()

//$scope.myID is equal to some id string like 'element123'

$scope.clearClass = function () {
    var target = angular.element(document.querySelector($scope.myID));
    target.removeClass('clicked');
}

我不相信在这里找到了正确的变量,或者正确地传递了querySelector

文档说它应该是这样的:querySelector('#element123'),但我不知道如何使用传入的变量(如 $scope.myID)来做到这一点。

如果有多个元素(例如按钮),我将如何做到这一点,如果单击一个元素,addClass 将仅适用于该按钮,而 removeClass 将适用于其余按钮?

【问题讨论】:

  • 我会选择
  • @Damiano 我要达到的目的是保存先前单击的元素的 id,并在单击另一个元素时擦除该类,以便页面上始终只有一个元素类。

标签: angularjs scope removeclass


【解决方案1】:

不要在控制器中操作 DOM。使用ngClass 指令:

$scope.clearClass = function () {
    $scope.clickedFlag = false;
}

在 HTML 中

<div ng-class="{ clicked: clickedFlag }"></div>

【讨论】:

  • 如果你添加一个编辑会给你答案,如何添加点击当前元素的类,删除所有其他元素点击的类。如果clearClass 函数实际上是该元素的ng-click?我只是对它的工作原理感到困惑..
  • @VolcovMeter 使用ngFocus 检测对元素的点击 (ng-focus="clickedFlag = true") 和 ngBlur 当它聚焦时 (ng-blur="clickedFlag = false") - 将它们添加到 输入 元素
  • @AlonEitan 你能发帖作为答案吗?我正在尝试您的建议,但遗憾的是,所有元素都添加了您的代码“点击”类。
  • @VolcovMeter 我得走了,但如果元素在 ng-repeat 内,则将所有引用从 clickedFlag 更改为 clickedFlag[$index],或者给每个输入一个不同的标志,例如:clickedFlagName , clickedFlagEmail 等等...
  • @VolcovMeter 是,但使用相同的引用 Clicked flag 作为其输入ng-class="{ clicked: clickedFlag[$index] }"ng-class="{ clicked: clickedFlagName }"ng-class="{ clicked: clickedFlagEmail }"
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多