当前位置: 首页 > 面试题库 >

angularjs中的foreach循环

岳阳文
2023-03-14
问题内容

我本来打算通过forEach loopAngularJS。有几点我不了解。

  1. 迭代器函数的用途是什么?没有它,还有什么办法吗?
  2. 如下所示,键和值的意义是什么?

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

另一个问题 :如果在控制台中出现条件并显示“ 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是您的键的字符串值,而value是…的值。您可以像这样使用键来访问您的值: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]

因此,值是您的对象(集合),键是数组的索引,因为:

[{ "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()一个异步请求。

您向儿子发送查询, 然后 在浏览器结束下载时发送成功。 但是
在发送请求后,您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");
         });
    });

});

这应该工作。

更深入

在$ HTTP
API是基于延迟/承诺的API由$
Q服务公开。虽然对于简单的使用模式而言,这并不重要,但对于高级用法,熟悉这些API及其提供的保证很重要。

您可以看一下延迟/承诺API,这是Angular进行平滑异步操作的重要概念。



 类似资料:
  • foreach循环遍历列表值并将控制变量(var)依次设置为列表的每个元素 - 语法 (Syntax) Perl编程语言中foreach循环的语法是 - foreach var (list) { ... } 流程图 (Flow Diagram) 例子 (Example) #!/usr/local/bin/perl @list = (2, 20, 30, 40, 50); # foreach lo

  • 我尝试将一个循环转换为一个循环在flutter中等待循环。我想要循环的元素是Firebase实时数据库中的快照。 我的函数如下所示: 我尝试了不同的方法,但是我没有让函数工作。 第一次尝试: 错误: 未处理的异常:键入'_InternalLinkedHashMap 第二次尝试: 错误: 未处理的异常:键入'_InternalLinkedHashMap 在所有的尝试中,我都得到了相同的错误。但是上述

  • 除了前面介绍的几种循环语句外,C# 同样也支持 foreach 循环,使用 foreach 可以遍历数组或者集合对象中的每一个元素,其语法格式如下: foreach(数据类型 变量名 in 数组或集合对象){     语句块; } foreach 会在每次循环的过程中,依次从数组或集合对象中取出一个新的元素放到 里定义的变量中,直到所有元素都成功取出后退出循环。 【示例】使用 foreach 循环

  • 本文向大家介绍C# Foreach循环,包括了C# Foreach循环的使用技巧和注意事项,需要的朋友参考一下 示例 foreach将迭代实现的类的任何对象IEnumerable(请注意IEnumerable<T>从其继承的对象)。此类对象包括一些内置对象,但不限于:List<T>,T[](任何类型的数组),Dictionary<TKey, TSource>以及诸如IQueryable和IColl

  • Perl 循环 Perl foreach 循环用于迭代一个列表或集合变量的值。 语法 语法格式如下所示: foreach var (list) { ... } 流程图 Perl 循环

  • 我有一个这样的数组 我想做的是前面的模型,为其数量绘制徽标,因此三星=3,索尼=7,以此类推,将绘制3个索尼徽标和7个三星徽标。 我想出了这样的办法 但是当然,所有这些都是为了每个数组条目,呼应出名称,所以我最终打印了5个三星,打印了5个索尼,等等。 如何使其使用 qty 数组的值而不是条目数?