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

时间:2014-12-22 07:24:23

标签: javascript angularjs

我创建了一个表单来动态添加多个用户信息。它工作正常。但是我想到arrayarray of objectng-repeat.内的工作问题如果我使用$scope.users = [];$scope.users=[{}]ng-repeat的工作方式不同。使用$scope.users = [], view appears blank, $ scope.users = [{}],视图会正确显示。 我为两者创建了小提琴链接。任何人都可以解释我到底发生了什么。

与$ scope.users = []的关联,是:http://jsfiddle.net/9Ymvt/2799/
$cope.users = [{ }]的关联是:http://jsfiddle.net/9Ymvt/2800/

更新:如果我使用$scope.users = [[]],它工作正常,但数据第一次没有绑定,因为它在$scope.users = [{}]中绑定。仅当我点击ob addMore users button时数据才会绑定 这是小提琴链接:http://jsfiddle.net/9Ymvt/2801/

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

4 个答案:

答案 0 :(得分:2)

$cope.users = [{ }]在其空白{}内有一个对象,因此ng-repeat将遍历数组内的对象。对象是否为空是没有关系的。这里你的ng-repeat运行了一次。

但在

$scope.users = [ ]users array内部没有任何内容,没有任何内容需要重复,因此ng-repeat不会迭代。

答案 1 :(得分:1)

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

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

ng-repeat="person in users"

到person.name。但是,.name只能附加到一个对象而不是一个数组,所以当你使用[[]]时绑定失败,因为angular尝试将.name附加到里面的数组。

答案 2 :(得分:0)

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

这个:

$scope.users =  [{ }]

等于:

$scope.users =  [];
$scope.users.push({ });

它只是声明带有项目的数组。

答案 3 :(得分:0)

非常简单:),

$ scope.users = []是一个空数组 而 $ scope.users = [{}]是一个空对象的数组。