2016-02-26 2 views
0

Я пытаюсь нажать данные в массиве, когда кнопка нажата, и удалите ее из массива, когда кнопка нажата еще раз (и измените класс кнопки).Как переключить кнопку?

<button 
    *ngFor="#color of colors" 
     [class.selected]="color === selectedColors" 
     (click)="onPress(color)"> 
     {{color.name}} 
</button> 

Я поставил два метода в моем классе - onPress & hasColor

onPress(color: Color) { 
this.selectedColors = color; 
    // ckecking color in array 
if (this.hasColor(this.colorsArray,this.selectedColors.id)) { 
     //need to splice a color from array and change background color to default (to blue color)  
} else {  
    // if not in colorsArray then push and change class to .selected 
    this.colorsArray.push(this.selectedColors.id); 
         } 
      } 

hasColor(arrayC,id) { 
     arrayC.forEach(function(item) { 
    if (item === id) { 
      return true; 
     } 
      return false;    
     }); 
    } 

Plunker

Как я могу это сделать? Метод hasColor возвращает истину или ложь, но в никогда не возвращается в методе onPress

ответ

2

метод hasColor возвращает истину или ложь

Нет, это не так.

Анонимная функция, которую вы передаете в forEach, возвращает true или false (и делает это для каждого элемента в цикле).

Функция hasColor не имеет собственного заявления о возврате.

Если вы хотите увидеть любые совпадения позиций в цикле for, вам нужно использовать переменную для отслеживания, если у вас есть какие-либо совпадения, а затем вернуть эту переменную после окончания цикла.

hasColor(arrayC, id) { 
    var match = false; 
    arrayC.forEach(function(item) { 
     if (item === id) { 
      match = true; 
     } 
    }); 
    return match; 
} 
+0

Большое спасибо. Мне нужно изучить Javascript ((( – Slip