2015-02-11 20 views
1

剛剛開始使用Angular時,我有點掙扎,現在像foreach循環一樣簡單,看起來很容易?如果找到元素,則返回false,並且不要在下面做任何事情。在Angular Controller中退出一個foreach

$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);" 

我的問題是我在哪裏去了?控制檯被記錄爲「找到」很好,但它並沒有阻止其餘。

+0

是否要在下面forEach停止代碼? – dfsq 2015-02-11 15:58:13

回答

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; 
}; 
+0

非常感謝!我想,如果認爲回報不會按我的想法工作,但不知道替代方案。你如何應對Angular Docs? – Ian 2015-02-11 16:08:53

+0

在這種情況下,它不是真正的角度,這是語言的主要限制,你不能影響循環中的外部代碼(只有你拋出異常:)。 – dfsq 2015-02-11 16:10:46

+0

啊,不知道.some(),再次感謝! :) – Ian 2015-02-11 16:16:05