【发布时间】:2016-11-29 18:07:16
【问题描述】:
我有一个列表,其中显示了来自数据库的单词查询,从那里我可以单击一个单词并将其推送到另一个我可以保存的列表。有了这个,我可以创建不同的单词表。如果我已经将它们推送到我的新列表中,我想做的是给这些词另一种颜色。
为此,我在控制器中使用一个函数将两个列表与 angular.foreach 进行比较。如果 wordFromQuery._id === wordOnNewList._id 我用 ng-style 给单词另一种背景颜色。
这是我的代码:
查看
ng-repeat="word in searchWords" ng-click="addWordToSet(word)" ng-class="isInside(word)" ng-style="{ background: choosenWords.value == 'exist' ? 'lightgreen' : 'white' }"
我遍历单词查询 (searchWords) 并使用 addWordtoSet(word) 将它们推送到我的另一个数组(这很好用)。 isInside(word) 将执行 angular.foreach 来比较两个数组,根据 isInside 函数的 if 语句,ng-style 应该提供不同的样式。
控制器
$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 推送的数组
发生的情况是,searchword 数组中的一个单词变为绿色(其集合为 +1,因此如果 arraypos.0 中的单词正确,则 arraypos.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)" 是正确的选择吗?
【问题讨论】:
标签: javascript angularjs arrays ng-class ng-style