У меня есть ng-repeat, который зацикливается на 9 делений, каждый из которых имеет свой цвет.
Когда пользователь нажимает на одно деление, его цвет становится цветом фона раздела.
Я пытаюсь сделать это:
Массив, который повторяется, имеет следующую структуру:
interface colorBoxes {
color: string;
isSelected: boolean;
}
в представлении:
<div ng-repeat="s in vm.colorBoxes track by $index">
<div class="pointer" ng-click="w.backgroundColor = s.color; vm.pickColor(s, $index)" ng-style='{"background-color": s.color}'>
<i ng-show="vm.isColorSelected($index) === true" class="fa fa-check fa-1x checkOnSelectedLegend"></i>
</div>
</div>
в контроллере:
pickColor(array: any, index: number) {
for(var i = 0; i<=this.colorBoxes.length; i++) {
this.colorBoxes[i].isSelected = false;
}
array[index].isSelected = true;
}
Я использую эту функцию, поэтому, когда вы нажимаете на DIV, его переменная: isSelected
становится истинной, а все остальные DIV имеют свои значения, равные false.
Я использую эту переменную в представлении с ng-show, чтобы показать галочку на DIV, который выбран в данный момент, но это не работает, ниже функции, которую я вставил в это ng-show
isColorSelected(index:number):boolean {
return this.colorBoxes[index].isSelected
}
Что я делаю не так?
Подводя итог, я хочу, чтобы при нажатии на поле его цветовая строка применялась к другому элементу (который корректно работает с моим кодом), а затем к этому полюНадо поставить галочку в верхней части экрана, я попытался с помощью вышеуказанных функций, установив isSelected
var to true при нажатии, но это не работает.
Я почти уверен, что проблема в том, что angular не проверяет изменения в этом ng-шоу, я просто не знаю точно, каксделайте так, чтобы он проверял изменения, и, возможно, есть более чистый способ получить то, что я пытаюсь сделать!
Спасибо
добавленная скрипка: http://jsfiddle.net/7zymp2gq/1/