2017-03-15 50 views
2

即时得到的值在从DB一个div和显示1个按钮使用ng-repeat目标仅在角

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

在我的控制器我有:

$scope.test= function(){ 
    $scope.isActive = !$scope.isActive; 
} 

我已经定义的类isActive在我的CSS,这是应用/删除点击按钮。有5个结果,因此创建了5个divs原因为ng-repeat和5 buttons(每个div分别为1)。问题是,每个按钮(全部5个)正在获得该类。我只想将该类应用/移除到单击的按钮上。我怎样才能做到这一点?

回答

1

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

的一种方式将是通过名称或任何唯一标识的按钮,你的函数:

<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; 
} 
+0

感谢。我试过了。什么都没发生。我把它改成'name.name'就像:'ng-class =“{'active':buttons [name.name] .isActive}”''并且'test(name.name)'自'name.name'只是唯一的,'name'没有任何价值,因为我使用'ng-repeat'。仍然不起作用。我理解你的逻辑,但是如何在使用'ng-repeat'时如何传递一些身份。 – Somename

+0

您可以在ng-click属性中使用ng-repeat内部的索引并通过测试($ index)。 – Ronald91

+0

尝试'ng-click =“test($ index)”'带和不带'buttons [name.name]'。它根本不工作。 – Somename

3

你可以尝试这样的事情:

<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> 

希望这会有所帮助。

+0

我在[jsFiddle](http://jsfiddle.net/gvfvdnuz/)上创建了[MCVE](https://stackoverflow.com/help/mcve) – A1rPun

+0

https://www.codementor.io/angularjs/tutorial/angular-best-practices-ng-repeats-index碰到这个,现在是我的错误 – Somename

+0

我编辑我的答案,然后在[jsFiddle](http://jsfiddle.net/xof0w9tj/)上试试。您不再需要控制器中的$ scope.test(index)'功能。 – Bhacaz

0

我创建了一个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; 
     } 

    }; 

而且你的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> 
+0

https://www.codementor.io/angularjs/tutorial/angular-best-practices-ng-repeats-index遇到了这个,这是我现在的错误 – Somename

+0

更新了我的plunk以使用该对象,并且只留下了索引追踪。 – Ronald91