Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 目标只有一个按钮的角度_Javascript_Angularjs_Ng Class - Fatal编程技术网

Javascript 目标只有一个按钮的角度

Javascript 目标只有一个按钮的角度,javascript,angularjs,ng-class,Javascript,Angularjs,Ng Class,Im从DB获取div中的值,并使用ng repeat显示: 我在css中定义了一个类isActive,该类在单击按钮时应用/删除。有5个结果,因此创建了5个div,导致ng重复,每个div有5个按钮1。问题是,每个按钮都有5个,都得到了该类。我希望该类仅应用/删除到单击的按钮。如何实现这一点?您需要跟踪每个按钮的状态 一种方法是将名称或唯一标识按钮的任何内容传递给函数: <div ng-controller = "myTest"> <div ng-repeat="nam

Im从DB获取div中的值,并使用ng repeat显示:


我在css中定义了一个类isActive,该类在单击按钮时应用/删除。有5个结果,因此创建了5个div,导致ng重复,每个div有5个按钮1。问题是,每个按钮都有5个,都得到了该类。我希望该类仅应用/删除到单击的按钮。如何实现这一点?

您需要跟踪每个按钮的状态

一种方法是将名称或唯一标识按钮的任何内容传递给函数:

<div ng-controller = "myTest">
    <div ng-repeat="name in names">
        <h4>{{name.name}}</h4>
            <button ng-class="{'active': buttons[name].isActive}" ng-click="test(name)" >me</button>
    </div>
</div>  

$scope.buttons = {};

$scope.test= function(name){
    $scope.buttons[name].isActive = !$scope.buttons[name].isActive;
}

您可以尝试以下方法:

<div ng-controller="myTest">
    <div ng-repeat="name in names">
        <h4>{{name.name}}</h4>
        <button ng-class="{ active : name.isActive }"
                ng-click="name.isActive = !name.isActive">me</button>
    </div>
</div>
希望这会有所帮助。

我创建了一个解决此问题的方法,无需修改源数组

你的功能变成了

  vm.test = function(buttonIndex) {
      //Clear the class if you press the same button again
      if (vm.buttonIndex === buttonIndex) {
        vm.buttonIndex = undefined;
      } else {
        vm.buttonIndex = buttonIndex;
      }

    };
你的HTML是

 <div ng-repeat="name in main.names track by $index">
    <h4>{{name.name}}</h4>
    <button ng-class="{'active': main.buttonIndex===$index}" ng-click="main.test($index)">me</button>
  </div>

谢谢我试过了。什么也没发生。我将其更改为name.name,例如:ng class={'active':buttons[name.name].isActive}以及testname.name,因为name.name是唯一的,并且name没有值,因为我使用的是ng repeat。还是不行。我理解您的逻辑,但在使用ng-repeat时,我如何传递一些标识。您可以使用ng-repeat的内部索引,并通过ng-click属性中的test$index。尝试了ng-click=test$index(带和不带按钮[name.name])。这根本不起作用。我创建了一个关于遇到这个,这是我的错误现在我编辑我的答案,我尝试它。您不再需要控制器中的fonction$scope.testindex。遇到了这个问题,这是我的错误现在更新了我的plunk以使用对象,并且只将索引保留在轨迹中。
  vm.test = function(buttonIndex) {
      //Clear the class if you press the same button again
      if (vm.buttonIndex === buttonIndex) {
        vm.buttonIndex = undefined;
      } else {
        vm.buttonIndex = buttonIndex;
      }

    };
 <div ng-repeat="name in main.names track by $index">
    <h4>{{name.name}}</h4>
    <button ng-class="{'active': main.buttonIndex===$index}" ng-click="main.test($index)">me</button>
  </div>