我正在浏览 forEach loop 中的 AngularJS 。有几点我不明白。

  • 迭代器函数有什么用?没有它有什么办法吗?
  • 如下图的key和value有什么意义?
  • angular.forEach($scope.data, function(value, key){});
    PS: 我试图在没有参数的情况下运行这个函数,但它不起作用。

    这是我的 json :
    [
       {
         "Name": "Thomas",
         "Password": "thomasTheKing"
       },
       {
         "Name": "Linda",
         "Password": "lindatheQueen"
       }
    ]
    

    我的 JavaScript 文件:
    var app = angular.module('testModule', []);
    
    app.controller('testController', function($scope, $http){
       $http.get('Data/info.json').then(
          function(data){
             $scope.data = data;
          }
       );
    
       angular.forEach($scope.data, function(value, key){
          if(value.Password == "thomasTheKing")
             console.log("username is thomas");
       });
    });
    

    另一个问题 :为什么上面的函数没有进入 if 条件并在控制台中打印“username is thomas”?

    最佳答案

    问题 1 & 2

    所以基本上,第一个参数是要迭代的对象。它可以是一个数组或一个对象。如果是这样的对象:

    var values = {name: 'misko', gender: 'male'};
    

    Angular 会一个一个地取每一个值,第一个是名字,第二个是性别。

    如果您要迭代的对象是一个数组(也可能),如下所示:
    [{ "Name" : "Thomas", "Password" : "thomasTheKing" },
     { "Name" : "Linda", "Password" : "lindatheQueen" }]
    

    Angular.forEach 将从第一个对象开始,然后是第二个对象。

    对于这个对象中的每一个,它都会一个一个地获取它们并为每个值执行特定的代码。这段代码被称为 迭代器函数 。如果您使用的是集合数组,forEach 是智能的并且行为会有所不同。下面是一些例子:
    var obj = {name: 'misko', gender: 'male'};
    var log = [];
    angular.forEach(obj, function(value, key) {
      console.log(key + ': ' + value);
    });
    // it will log two iteration like this
    // name: misko
    // gender: male
    

    所以键是键的字符串值,值是......值。您可以使用 key 访问您的值,如下所示:obj['name'] = 'John'
    如果这次你显示一个数组,像这样:
    var values = [{ "Name" : "Thomas", "Password" : "thomasTheKing" },
               { "Name" : "Linda", "Password" : "lindatheQueen" }];
    angular.forEach(values, function(value, key){
         console.log(key + ': ' + value);
    });
    // it will log two iteration like this
    // 0: [object Object]
    // 1: [object Object]
    

    那么 value 是您的对象(集合),而 key 是您的数组的索引,因为:
    [{ "Name" : "Thomas", "Password" : "thomasTheKing" },
     { "Name" : "Linda", "Password" : "lindatheQueen" }]
    // is equal to
    {0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
     1: { "Name" : "Linda", "Password" : "lindatheQueen" }}
    

    我希望它能回答你的问题。这是一个 JSFiddle,可以运行一些代码并根据需要进行测试:http://jsfiddle.net/ygahqdge/

    调试你的代码

    问题似乎来自于事实 $http.get() 是一个异步请求。

    你发送一个关于你儿子的查询, THEN 当你浏览器结束下载它时它执行成功。 但是 在发送您的请求后,您使用 angular.forEach 执行循环,而无需等待 JSON 的回答。

    您需要在成功函数中包含循环
    var app = angular.module('testModule', [])
        .controller('testController', ['$scope', '$http', function($scope, $http){
        $http.get('Data/info.json').then(function(data){
             $scope.data = data;
    
             angular.forEach($scope.data, function(value, key){
             if(value.Password == "thomasTheKing")
               console.log("username is thomas");
             });
        });
    
    });
    

    这应该有效。

    更深入



    你可以看看 deferred/promise APIs ,它是 Angular 的一个重要概念,使异步操作流畅。

    关于angularjs - angularjs 中的 foreach 循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29953198/

    10-16 05:11
    查看更多