2017-03-15 59 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