我正在使用pretty nice plugin为AngularJS提供标签输入指令。
我使用参数onTagAdding
检查标记的值,然后才将其添加到输入中。
on-tag-adding="{expression}"
所以,正如文件所说:
评估将在添加新标记之前调用的表达式。 新标签可用作$ tag。此方法必须返回true或false。如果为false,则不会添加标记。
所以这是一个live example。
$scope.checkTag = function(tag) {
angular.forEach($scope.forbiddenTags, function(e){
if (e.text === tag.text) {
alert('Tag is forbidden')
return false;
}
})
alert('Execution is continuing');
}
我希望如果输入的值与来自$scope.forbiddenTags
数组的那些标记匹配一个,那么应该返回 false 并且应该停止函数的执行,但是它的工作原理并不像我期待的那样=)。我已尝试使用 return ,但它也无法正常工作。
任何帮助和建议将不胜感激!提前谢谢!
答案 0 :(得分:3)
问题是从forEach迭代器函数返回没有用,它最终不会像你期望的那样从外部checkTag函数返回该返回值。你可以尝试这样的事情。
$scope.checkTag = function(tag) {
var found = $scope.forbiddenTags.some(function(ftag){
if (ftag.text === tag.text) {
alert('Tag is forbidden');
return true;
}
//If you do not need alert then just do
// return (ftag.text === tag.text);
});
return !found;
}
我正在使用array.some(如果需要支持IE< 9,请查看垫片),以便在找到匹配后退出循环(以避免不能进行的不必要的迭代{ {1}})返回布尔值。您也可以使用传统的forEach
循环作为使用返回。如果你仍想使用forEach,那么保存一个布尔标志,如果找到它并将其返回到外面。
for