3 respuestas

La mejor respuesta

Usted está vinculando las 4 instancias de la directiva al mismo alcance. Algo así hará un estado separado para cada una de sus instancias. Si vincula su evento de clic a una función, que restablece todas las verdades / falsificaciones antes de configurar el activo, solo mantendrá uno abierto.

<div class="con-div" ng-repeat="row in fakeDataSet" ng-click="setToolTip(row)">
    <test-div click-val="data.clicked[row]"></test-div>
</div>

$scope.fakeDataSet = [1,2,3,4];
$scope.data = {};
$scope.data.clicked =  {1: false, 2: false, 3: false, 4:false};

$scope.setToolTip = function(row){
    Object.keys($scope.data.clicked).forEach(function(elem){
        $scope.data.clicked[elem] = false;      
    });
    $scope.data.clicked[row] = true;
}
2
thsorens 9 may. 2016 a las 20:34

Parece que ha vinculado el mismo valor de clic con cada elemento debido a que se muestran / ocultan todas las informaciones sobre herramientas.

<div class="con-div" ng-repeat="row in fakeDataSet" ng-click="row.clicked = !row.clicked">
    <test-div click-val="row.clicked"></test-div>
</div>

$scope.fakeDataSet = [{value : 1, clicked : false},
{value : 2, clicked : false},
{value : 3, clicked : false},
{value : 4, clicked : false}];
0
Jitendra 9 may. 2016 a las 20:22

Solo necesita cambiarlo a:

ng-click="data.clicked[row] = !data.clicked[row]">

https://plnkr.co/edit/iYAtHmRSHKnpNy1CBRG3?p=preview

0
dave 9 may. 2016 a las 20:21