Angular JS Ng-Repeat Issue

时间:2015-08-14 10:20:34

标签: javascript angularjs

我有一个场景,比如我想要显示只有一个数组中可用的内容,如果它出现在另一个数组中则不需要显示它。

我的HTML就像

<div ng-repeat="array1Value in array1">
    <div ng-repeat="array2Value in array2">
        <div ng-if="isNotFound(array1,array2Value.id)">
            <span>{{array2Value.name}}</span>
        </div>
    </div>
</div>

我的js类就像

var app = angular.module("MyApp",{});

app.controller("MyController",function($scope) {
    $scope.array1 = [
        {
            id:"1",name:"one"
        },
        {
            id:"2",name:"two"
        },
        {
            id:"3",name:"three"
        }
    ];

    $scope.array2 = [
        {
            id:"1",name:"one"
        },
        {
            id:"2",name:"two"
        },
        {
            id:"4",name:"four"
        }
    ];

    $scope.alreadyPrinted = [{}];

    $scope.isNotFound = function(array,value){
        for(i = 0; i < array.length; i++){
            if (value === array[i].id) {
                return false;
            }
        }

        if($scope.alreadyPrinted.indexOf(value) > -1){
            return false;
        } else {   
            $scope.alreadyPrinted.push(value);
            return true;
        }
    }
});

我只需要四个输出。但截至目前,一切都没有到来。请帮我纠正这个问题。

3 个答案:

答案 0 :(得分:1)

你需要删除外部循环...试试这个:

<div ng-repeat="array2Value in array2">
    <div ng-if="isNotFound(array1,array2Value.id)">
        <span>{{array2Value.name}}</span>
    </div>
</div>

答案 1 :(得分:1)

如果我理解正确,如果值不在第一个数组中,则希望返回True。

尝试使用isnotFound函数:

format(dateserial(year(now()),month(now()),day(now())),"mmddyy")

或者甚至更好:

$scope.isNotFound = function(array,value){
    for(i = 0; i < array.length; i++){
        if (value !== array[i].id) {
            return true;
        }
    }
    return fase;
}

我不确定你为什么要重复第一个数组和allreadyPrinted部分。你的HTML可以是:

$scope.isNotFound = function(array,value){
    angular.forEach(array, function(item){
        if (value !== item.id) {
            return true;
        }
    });
    return fase; 
}

答案 2 :(得分:0)

我认为您已经打印过的代码存在问题。您的代码显示“四”作为输出。尝试在代码中插入一个警告框,如

{{1}}

您将在浏览器中看到“四个”输出,但仅限一次迭代。 更正已打印的code.alert框将帮助您隔离问题。