【问题标题】:How to addClass and removeClass with different element on AngularJS?如何在 AngularJS 上添加不同元素的 addClass 和 removeClass?
【发布时间】:2015-12-29 04:00:05
【问题描述】:

我有一个想要实现的简单 dom:

<header>
    <button class="open-btn></button>
</header>

<nav class="active">
    <button class="close-btn"></button>
</nav>

如何在Angular上用单独的元素实现简单的addClass和removeClass功能?

我已经阅读过关于 Service、Factory 和 Controller 的文章,这听起来让我很困惑。

我已经能够成功地使用 Controller 在同一个控制器上添加和删除类,比如说 open-btnclose-btn 都在 nav 下,但是如果我使用不同的元素呢?我所做的对我来说似乎很错误,这是正确的方法吗?我必须将其注册到 Service/Factory 吗?

场景

当用户点击open-btn时,元素nav会有active的类,如果用户点击close-btn,那么nav会移除它的active按钮。

使用 jQuery 似乎很容易,但我将如何使用 Angular 方式呢?

【问题讨论】:

  • 跟课堂有关的应该想出ng-class

标签: javascript angularjs


【解决方案1】:

您可以让按钮在作用域中设置一个值,然后使用ng-class根据该元素的值给元素类:

<header>
   <button class="open-btn" ng-click="isActive = true">Open</button>
</header>

<nav ng-class="{ 'active': isActive }">
   <button class="close-btn" ng-click="isActive = false">Close</button>
</nav>

来自ng-class 文档:

如果表达式的计算结果是一个对象,那么对于每个键值对 具有真值的对象的相应键用作 类名。

【讨论】:

  • 嘿 Danny,这看起来很棒,但我必须将它添加到单个控制器中,对吗?
  • 嗯...是的。我看到您在评论中添加了他们没有相同的控制器,但我认为我需要查看更多代码才能知道如何处理这种情况。我不清楚这两个控制器将如何交互。乍一看,它们看起来像一个页面上的两个按钮(我假设一个控制器)。
  • 你是对的,他们都在同一个页面上。我对组织控制器以及何时使用它有些困惑,在这种情况下,我认为我应该创建一个 HeaderController 和 NavController,哈哈。
  • 如果您出于特定原因明确地这样做,那么这很可能是矫枉过正。页面或指令很可能有一个控制器来处理两个按钮。
  • 太棒了!非常感谢你,这让我头脑清醒。 :)
【解决方案2】:

Angular 有 ngClass 来添加/删除类

像这样

Ctrl

$scope.isOpen=false;

$scope.open=function(){
  $scope.isOpen=true;
}
$scope.close=function(){
  $scope.isOpen=false;
}

HTML

<header>
    <button class="open-btn" ng-click="open()"></button>
</header>

<nav class="active" ng-class="{'active': isOpen }">
    <button class="close-btn" ng-click="close()"></button>
</nav>

【讨论】:

  • 它必须在它的上下文中。就像只有一个控制器一样,如果有嵌套控制器,则它具有相同的控制器,那么它必须至少是它自己或它的父级。 @draftdraft88
  • 谢谢 Anik,我更喜欢你使用函数的方式。
猜你喜欢
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2020-10-29
  • 1970-01-01
  • 2017-07-14
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多