使用 ng-click 在 angularJs 中添加和删除类

IT技术 javascript angularjs angularjs-ng-click ng-class
2021-01-31 06:23:28

我正在尝试如何使用 ngClick 添加一个类。我已将我的代码上传到 plunker单击此处查看 angular 文档,我无法弄清楚应该完成的确切方式。下面是我的代码片段。有人可以指导我朝着正确的方向前进吗

 <div ng-show="isVisible" ng-class="{'selected': $index==selectedIndex}" class="block"></div>

控制器

var app = angular.module("MyApp", []);
app.controller("subNavController", function ($scope){

        $scope.toggle = function (){
            $scope.isVisible = ! $scope.isVisible;
        };

        $scope.isVisible = false;
    });
6个回答

我想在我的代码中动态添加删除active”类ng-click,这是我所做的。

<ul ng-init="selectedTab = 'users'">
   <li ng-class="{'active':selectedTab === 'users'}" ng-click="selectedTab = 'users'"><a href="#users" >Users</a></li>
   <li ng-class="{'active':selectedTab === 'items'}" ng-click="selectedTab = 'items'"><a href="#items" >Items</a></li>
</ul>
-1 用于 ng-init。根据 AngularJS 文档 -The only appropriate use of ngInit is for aliasing special properties of ngRepeat, as seen in the demo below. Besides this case, you should use controllers rather than ngInit to initialize values on a scope.
2021-03-16 06:23:28
你也可以使用 `ng-class="{'active': true}[selectedTab === 'users']"` 的未公开语法
2021-03-19 06:23:28
我只是在“这里”避免使用控制器部分,因为这只是为了展示如何做到这一点的基本功能......
2021-03-20 06:23:28
我只是添加这个,因为它可能会帮助其他人。angular-ui-router 具有您指定的功能等等。您创建由 uri 表示的状态。每个状态可能有 1 个或多个控制器、1 个或多个模板和 1 个或多个绑定到它们的视图。链接是使用 ui-sref 指令生成的。当状态处于活动状态时,ui-sref-active 指令会将特定类绑定到该元素。 Angular UI-Router 文档
2021-03-31 06:23:28
我不明白为什么这会起作用。我在 Angular 1.3.8 中做了一些非常相似的事情,当单击另一个元素时,条件类不会从元素中删除。我认为是因为其他元素没有重新渲染。为什么,这曾经奏效过?单击单个元素时,旧版本的 Angular 是否会重新构建整个列表?
2021-04-12 06:23:28

您只需要将一个变量绑定到指令“ng-class”中并从控制器中更改它。以下是如何执行此操作的示例:

var app = angular.module("ap",[]);

app.controller("con",function($scope){
  $scope.class = "red";
  $scope.changeClass = function(){
    if ($scope.class === "red")
      $scope.class = "blue";
    else
      $scope.class = "red";
  };
});
.red{
  color:red;
}

.blue{
  color:blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="ap" ng-controller="con">
  <div ng-class="class">{{class}}</div>
  <button ng-click="changeClass()">Change Class</button>    
</body>

这是在jsFiddle 上工作的示例

也看看这个 SO 线程。可能不是 100% 与问题范围相关联,但仍提供额外有用的信息:stackoverflow.com/questions/31047094/...
2021-03-15 06:23:28
class是保留字,className改为使用,YUI 编译器将无法缩小它。
2021-03-19 06:23:28
谢谢。要完全了解单击更改类按钮时发生的情况,请打开控制台并查看代码。
2021-03-26 06:23:28
如果我想在同一视图中为多个 div 使用此代码怎么办?此代码实际更改所有 div 的类,我如何仅将类应用于选定的单击项目
2021-04-05 06:23:28

有一种简单而干净的方法可以只用指令来做到这一点。

<div ng-class="{'class-name': clicked}" ng-click="clicked = !clicked"></div>

如果要删除以前的类并添加新类,也可以在指令中执行此操作

    .directive('toggleClass', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                if(element.attr("class") == "glyphicon glyphicon-pencil") {
                    element.removeClass("glyphicon glyphicon-pencil");
                    element.addClass(attrs.toggleClass);
                } else {
                    element.removeClass("glyphicon glyphicon-ok");
                    element.addClass("glyphicon glyphicon-pencil");
                }
            });
        }
    };
});

并在您的模板中:

<i class="glyphicon glyphicon-pencil" toggle-class="glyphicon glyphicon-ok"></i>
这是真的,但我试图使用普通的 angular js。
2021-03-25 06:23:28
你为什么不这样做:angular.element('glyphicon glyphicon-pencil).removeClass('glyphicon glyphicon-pencil')?angular.element 几乎是 jquery 中 $ 的 angular jqLit​​e 版本。您可以创建一个调用此函数的服务或指令,并在构造函数中传入 removeClasses 和 addedClasses
2021-03-28 06:23:28
这是一个愚蠢的评论。这是一件完全合法的事情,虽然我同意当你解释如何在 Angular 中做某事时它可能不是它的地方
2021-04-01 06:23:28
为什么标签和指令中有图标的名称?
2021-04-13 06:23:28

你完全正确,你所要做的就是在你的 ng-click 中设置 selectedIndex 。

ng-click="selectedIndex = 1"

这是我如何实现一组更改 ng-view 的按钮,并突出显示当前选定视图的按钮。

<div id="sidebar" ng-init="partial = 'main'">
    <div class="routeBtn" ng-class="{selected:partial=='main'}" ng-click="router('main')"><span>Main</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view1'}" ng-click="router('view1')"><span>Resume</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view2'}" ng-click="router('view2')"><span>Code</span></div>
    <div class="routeBtn" ng-class="{selected:partial=='view3'}" ng-click="router('view3')"><span>Game</span></div>
  </div>

这在我的控制器中。

$scope.router = function(endpoint) {
    $location.path("/" + ($scope.partial = endpoint));
};