У меня есть список, который показывает запрос слов из базы данных, оттуда я могу щелкнуть одно слово, и оно будет перемещено в другой список, который я могу сохранить. С этим я могу создавать различные списки слов. Что я хочу сделать, так это придать словам другой цвет, если я уже добавил их в свой новый список.
Для этого я использую функцию в своем контроллере для сравнения двух списков с и angular.foreach. Если wordFromQuery._id === wordOnNewList._id, я дал словам другой цвет фона с помощью стиля ng.
Вот мой код:
Просмотреть
ng-repeat="word in searchWords" ng-click="addWordToSet(word)" ng-class="isInside(word)" ng-style="{ background: choosenWords.value == 'exist' ? 'lightgreen' : 'white' }"
Я перебираю слова query (searchWords) и с помощью addWordtoSet(word) помещаю их в свой другой массив (это прекрасно работает). isInside(word) выполнит angular.foreach для сравнения двух массивов, а стиль ng должен предоставлять разные стили в соответствии с оператором if из функции isInside.
Контроллер
$scope.isInside = function (word) {
angular.forEach($scope.currentWordlist, function (item) {
if (item._id === word._id) {
$scope.choosenWords = {value: 'exist'};
} else {
$scope.choosenWords = {value: 'notOnList'};
}
});
};
angular.forEach сравнивает слова из обоих массивов. currentWordList - это массив, в который я нажимаю с помощью addWordToSet
Что происходит, так это то, что одно слово в массиве поисковых слов получает зеленый цвет (и его набор равен +1, поэтому, если слово в массиве поз. 0 будет правильным, массив поз. 1 получит зеленый цвет).
Я подозреваю, что сделал все неправильно с элементом ng-class, но я не нашел другой хорошей возможности получить слово ._id другим способом. Я сделал что-то явно не так здесь?
Буду признателен за советы или подсказки. Спасибо!
ОБНОВЛЕНИЕ
Он прекрасно работает с функцией addWordToSet:
$scope.addWordToSet = function (word) {
var exists = false;
angular.forEach($scope.currentWordlist, function (item) {
if (item._id === word._id) {
exists = true;
}
});
if (exists === false) {
$scope.currentWordlist.push(word);
}
};
Единственное, что мне нужно, я думаю, это делать это не по щелчку, а мгновенно, ничего не нажимая. подходит ли my ng-class="isInside(word)"
для этого?