2017-07-11 1 views
0

Ich habe eine Matrix mit dem folgenden Code erstellt:ng-Klick fügt eine Klasse auf alle Elemente anstelle von nur einem

<div class="cell-container" ng-repeat="cell in field"> 
    <div ng-repeat="cols in cell track by $index" class="cell" ng-click="selectShip(cols)" ng-class="{ selected: !cols.empty }"> 
     {{ $parent.$index }} {{ $index }} 
    </div> 
</div> 

Innerhalb der Richtlinie I eine Funktion haben, dass, wenn darauf geklickt sollte den Objektwert ändern und hinzufügen eine Klasse für das Klickelement

scope: { 
    field: '=', 
    type: '@' 
}, 
link: function($scope) { 
    $scope.selectShip = function(item) { 
     if (item.empty === true) { 
      item.empty = false; 
     } else { 
      item.empty = true; 
     } 
    } 
} 

Das Problem ist, dass, wenn ich in der inneren ng-Wiederholung auf einem div klicken, wird der Objektwert ändert und fügt eine Klasse auf allen divs, nicht nur angeklickten ein.

Was mache ich falsch?

+0

Wo verwenden Sie Ihre Direktive in der HTML oder Ihrer Seite? –

+0

Ich verstehe die Frage nicht –

+0

Diese Vorlage, die Sie in Frage gezeigt haben, ist es der Richtlinie Vorlage oder Vorlage Ihrer Seite (Teilansicht oder Route)? – Shantanu

Antwort

0

Es muss sein, weil Sie $scope verwenden. Stattdessen sollten Sie einen isolierten Bereich verwenden, um einen separaten Bereich für alle erstellten Richtlinienelemente zu erhalten. Direktiven in angular erben standardmäßig den übergeordneten Bereich. Sie können hier Hilfe finden - How to create an isolate scope

+0

Es wurde bereits ein isolierter Bereich erstellt. Sehen Sie sich die ersten Zeilen des Anweisungscodes an. –

+0

Aber Sie verwenden es nicht in der Link - Funktion - '$ scope.selectShip = function (item) {' –

Verwandte Themen