退出Angular Controller中的foreach

时间:2015-02-11 15:54:33

标签: javascript angularjs

刚刚开始使用Angular我已经有点挣扎了,现在像foreach循环一样简单似乎很容易吗?如果找到一个元素,则返回false,不要执行任何操作。

$scope.addFav = function($text, $link, $icon)
{

    var $favlist = $scope.favorites;

    $favlist.forEach(function(element, index, array) {
        console.log(element.name);
        console.log($text);
        if (element.name == $text)
        {
            console.log("Found");
            return false;
        }

    });

    $favlist.unshift({href: $link, name: $text, icon:$icon});

    if($favlist.length > 5)
        $favlist.pop();

    $scope.favorites = $favlist;

    return false;
};

我的用例

<i class="fa fa-star-o" ng-click="addFav(item.name, item.href, item.icon);"

我的问题是我哪里出错了?控制台记录“发现”很好,但它不会停止其余部分。

1 个答案:

答案 0 :(得分:1)

通过返回forEach内部回调不会阻止外部代码执行。在这种情况下,最好使用Array.prototype.some方法检查数组是否包含必要的值,然后使用简单的if块返回或继续。

$scope.addFav = function ($text, $link, $icon) {

    var $favlist = $scope.favorites,
        found = $favlist.some(function (element, index, array) {
            return element.name == $text;
        });

    if (found) {
        return false;
    } 

    $favlist.unshift({
        href: $link,
        name: $text,
        icon: $icon
    });

    if ($favlist.length > 5) $favlist.pop();

    $scope.favorites = $favlist;

    return false;
};