Javascript ng显示“调用方法”不起作用

Javascript ng显示“调用方法”不起作用,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我是AngularJs新手,通过w3schools教程,我创建了自己的示例,其中ng show调用方法在ng click事件后删除元素 当我点击按钮时,它调用HidePerson方法。此外,它多次调用ShowPerson方法,似乎可以查找,但无论何时返回true或false,元素总是可见的 这是我的密码 var personCtrl=角度。模块“person”,[]; 控制器'personCtrl',函数$scope,$http{ $scope.persons=[]; $scope.perso

我是AngularJs新手,通过w3schools教程,我创建了自己的示例,其中ng show调用方法在ng click事件后删除元素

当我点击按钮时,它调用HidePerson方法。此外,它多次调用ShowPerson方法,似乎可以查找,但无论何时返回true或false,元素总是可见的

这是我的密码

var personCtrl=角度。模块“person”,[]; 控制器'personCtrl',函数$scope,$http{ $scope.persons=[]; $scope.personIgnoreList=[]; $scope.GetPersons=函数{ $http.get'http://www.w3schools.com/website/Customers_JSON.php' .成功功能数据,obj1、obj2、obj3{ $scope.persons=数据; } .错误功能数据,obj1、obj2、obj3{ $scope.persons=Ops…smth出错了。。。; } }; $scope.ShowPerson=职能人员{ $$scope.personIgnoreList.eachfunction i,p{ 如果p==人{ 返回false; } }; 返回true; } $scope.HidePerson=职能人员{ $scope.personIgnoreList.pushperson; } }; {{person.Name}来自{{person.City}-{{person.Country}
我不会在angularJS中使用jQuery,而且在您的情况下是无用的,您可以这样更改forEach:

    $scope.ShowPerson = function (person) {
        var show = true;
        angular.forEach($scope.personIgnoreList, function (p, i) {
            if (p == person) {
                show= false;
            }
        });
        return show;
    }

我不会在angularJS中使用jQuery,而且在您的情况下是无用的,您可以这样更改forEach:

    $scope.ShowPerson = function (person) {
        var show = true;
        angular.forEach($scope.personIgnoreList, function (p, i) {
            if (p == person) {
                show= false;
            }
        });
        return show;
    }
使用此代码

$($scope.personIgnoreList).each(function (i, p) {
    if (p == person) {
        return false;
    }
});
return true;
您总是返回true,因为从$返回。每个都不同于从函数返回,它只会中断循环

正确的方法是使用如下内容:

$scope.ShowPerson = function (person) {
    return !$scope.personIgnoreList.some(function(p) {
        return p === person;
    });
}
演示:

使用此代码

$($scope.personIgnoreList).each(function (i, p) {
    if (p == person) {
        return false;
    }
});
return true;
您总是返回true,因为从$返回。每个都不同于从函数返回,它只会中断循环

正确的方法是使用如下内容:

$scope.ShowPerson = function (person) {
    return !$scope.personIgnoreList.some(function(p) {
        return p === person;
    });
}
演示:

一个数组有一些和每一种方法可以让你做这些类型的测试

$scope.ShowPerson = function (person) {
  return $scope.personIgnoreList.every(function(p) {
           return p != person;
          });
};
对于人格中的每个人,如果不等于人格,请重新列出一些测试。如果是,则它将中断并返回false

注意:IE 8中没有each。

数组具有允许您执行此类测试的某些方法和each方法

$scope.ShowPerson = function (person) {
  return $scope.personIgnoreList.every(function(p) {
           return p != person;
          });
};
对于人格中的每个人,如果不等于人格,请重新列出一些测试。如果是,则它将中断并返回false


注意:IE 8中不提供every。

如果$$scope.personIgnoreList.eachfunction i,p{-不要在那样的角度应用程序中使用jQuery…根本不要在角度应用程序中使用jQuery,这种东西你应该使用Directives。如果$$scope.personIgnoreList.eachfunction i,p,你也可以尝试使用ng{-不要在Angular应用程序中使用jQuery…根本不要在Angular应用程序中使用jQuery,你应该使用Directives来完成这类工作你仍然在使用jQueryangularJS@FrancescoE.jQuery不是这里的问题。但是为什么要对forEach使用jQuery呢?没错,但它仍然不是问题。例如,在您的答案中,您仍然有同样的问题,即使你使用angular.forEach.好吧,假设你根据我的建议修改了不使用jQuery,我对我的答案也做了同样的修改,那就是合作!你仍然在使用jQueryangularJS@FrancescoE.jQuery不是这里的问题。但是为什么要对forEach使用jQuery呢?没错,但它仍然不是问题。例如在你的答案中,你仍然有同样的问题,即使你使用angular.forEach。好吧,假设你修改了我的建议,不使用jQuery,我对我的答案也做了同样的修改,那就是合作!