【问题标题】:Add and remove class when element clicked with Angular使用 Angular 单击元素时添加和删除类
【发布时间】:2016-02-08 03:10:24
【问题描述】:

我想知道如何在使用 AngularJS 单击 div 时向 HTML 元素添加或删除类。我有一个 div,当我点击它时,我需要检查它是否包含一个类('already-member')。如果该类存在,则删除它,如果不存在,则添加它。我知道如何在 Javascript 中执行此操作,但在 Angular 中不确定。

tab-members.html

<div collection-repeat="friend in user.friends" item-width="50%" item-height="80px" class="friends-list">
  <div class="item friend-avatar" ng-class="{'already-member' : friend.already_member == true}" ng-click="toggleStatus()">
    <div class="avatar">
      <img src="{{friend.avatar_url}}">
      <i class="check-icon" ng-class="{'hidden' : friend.already_member == false}"></i>
    </div>
    <div class="wrapper-friend-name">
      <p class="friend-name">{{friend.name}}</p>
    </div>
  </div>
</div>

这是 controllers.js 中的代码

.controller('MembersCtrl', function($scope) {
  $scope.members = [
    {avatar_url: "http://..."},
    {avatar_url: "http://..."},
    {avatar_url: "http://..."},
    {avatar_url: "http://..."}
  ];
  $scope.user = {
    avatar_url: "http://...",
    friends: [
      {avatar_url: "http://...", name: "Pablo Pepunto", already_member: true},
      {avatar_url: "http://...", name: "Pablo Pepunto", already_member: false},
      {avatar_url: "http://...", name: "Pablo Pepunto", already_member: false},
      {avatar_url: "http://...", name: "Pablo Pepunto", already_member: false}
    ]
  }
  $scope.$on('$ionicView.beforeEnter', function (event, viewData) {
    viewData.enableBack = true;
  });
  $scope.toggleStatus = function($scope) {
    console.log('$scope'); //$scope is undefined
    $scope.classList.toggle('already_member');
    $scope.already_member = !$scope.already_member;

  }
})

【问题讨论】:

  • 附带说明,您应该使用 === 而不是 ==。浅等号有时会导致意想不到的结果。

标签: angularjs angularjs-ng-click


【解决方案1】:

我会做以下事情:

在模板中:

ng-click="toggleStatus(friend)"

在控制器中:

$scope.toggleStatus = function(friend) {
    friend.already_member = !friend.already_member;
}

那么你定义的ng-class="{'hidden' : friend.already_member == false}" 指令应该可以工作了。

【讨论】:

    【解决方案2】:
    1. 在您的 div 元素上添加一个 ng-click 侦听器。触发点击后,在控制器中切换布尔变量 isMember 以设置类。
    2. 使用 ng-class 指令和 div 上的 isMember 变量来检查是否设置了 isMemberng-class="{'already-member': isMember}"

    你也可以像这样直接设置和使用变量:

    <div ng-click="isMember = !isMember" ng-class="{'already-member': isMember}">
    

    我建议在控制器中设置标志以获得更好的可读性。

    【讨论】:

    • 使用此解决方案,我必须将控制器中的 isMember 定义为 true 或 false。但我不能这样设置,因为它取决于friend.already_member的布尔值
    • 将 isMember 替换为friend.already_member。如何命名变量并不重要
    • 好的。它通过将friend.already_member替换为isMember来实现。感谢您的帮助
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多