Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在angularJS中与ng repeat一起使用时,javascript[]、[[]]和[{}]之间的工作差异_Javascript_Angularjs - Fatal编程技术网

在angularJS中与ng repeat一起使用时,javascript[]、[[]]和[{}]之间的工作差异

在angularJS中与ng repeat一起使用时,javascript[]、[[]]和[{}]之间的工作差异,javascript,angularjs,Javascript,Angularjs,我创建了一个表单来动态添加多个用户的信息。它工作得很好。但是在我的脑海中有一个关于数组和对象数组在ng repeat中工作的问题。如果我使用$scope.users=[]和$scope.users=[{}],ng repeat的工作方式不同。使用$scope.users=[],视图将显示为空,和$scope.users=[{}],视图将正确显示。 我已经为两者创建了小提琴链接。谁能解释一下这里到底发生了什么 与$scope.users=[]的链接是: 与$cope.users=[{}]的链接是:

我创建了一个表单来动态添加多个用户的信息。它工作得很好。但是在我的脑海中有一个关于
数组
对象数组
ng repeat中工作的问题。
如果我使用
$scope.users=[]
$scope.users=[{}]
ng repeat
的工作方式不同。使用
$scope.users=[],视图将显示为空,
$scope.users=[{}],视图将正确显示。 我已经为两者创建了小提琴链接。谁能解释一下这里到底发生了什么

与$scope.users=[]的链接是:
$cope.users=[{}]
的链接是:

更新:如果我使用
$scope.users=[[]]
,它可以正常工作,但是第一次数据没有绑定,因为它是在
$scope.users=[{}]
中绑定的。仅当我单击“添加更多用户”按钮时,数据才会绑定 这里是小提琴链接:


我在想,如果数据绑定到
[{}]
,为什么不绑定到
[[]]

$cope.users=[{}]
在其空白
{}
中有一个对象,因此
ng repeat
将迭代数组中的对象。不管对象是否为空。在这里,您的
ng repeat
运行1次

但是在


$scope.users=[]
用户数组
里面没有任何内容,没有可迭代的内容,因此
ng repeat
不会进行迭代。

[{}]是一个带有空对象的数组,因此它的长度为1,当[]是长度为0的空数组时,将发生循环,因此循环不会在其上运行。因此,当使用[{}]运行时,将填充表单,因为angular可以在数组上循环

更新:这不是[]对{}的问题。 {}等于new Object(),而[]等于new Array()。 外部数组,即您正在循环的用户,尝试绑定循环的当前元素,即您案例中的人物(从下面的代码段)


给某人的名字。但是,.name只能附加到对象而不能附加到数组,因此当您使用[[]]时绑定失败,因为angular尝试将.name附加到内部数组。

第一个
$scope.users=[]
是空数组,第二个
$scope.users=[{}]
只是一个具有一个对象的数组。 当您执行ng repeat时,它将遍历数组中的所有对象,在第一种情况下,数组为空,这就是视图为空的原因

这:

$scope.users =  [{ }]
等于:

$scope.users =  [];
$scope.users.push({ });
这只是一个包含项的数组声明。

非常简单:)

$scope.users=[]是一个空数组 虽然
$scope.users=[{}]是一个带有空对象的数组。

很高兴能帮助您:)迭代应该可以工作,但数据绑定不行,为什么?您试图将
名称
年龄
绑定到一个不起作用的数组,而不尝试将值绑定到对象<代码>数组仅具有值,但
对象
同时具有属性和相关值。试图将属性
name
绑定到具有该值的数组中时出现错误。@Ved更新了答案。更多信息:谢谢。。对你的答案投了赞成票。
$scope.users =  [];
$scope.users.push({ });