我创建了一个表单来动态添加多个用户信息。它工作正常。但是我想到array
和array of object
在ng-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/
我在想什么,如果数据与[{}]
绑定,为什么不与[[]]
;
答案 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 = [{}]是一个空对象的数组。