Angular标签指令问题

时间:2015-09-11 14:48:55

标签: javascript angularjs

我正在使用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 ,但它也无法正常工作。

任何帮助和建议将不胜感激!提前谢谢!

1 个答案:

答案 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