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

Working difference between javascript [],[[]] and [{}] when used with ng-repeat in angularJS

本文关键字:一起 工作 ng-repeat angularJS javascript 中与      更新时间:2023-09-26

我创建了一个表单来动态添加多个用户信息。它工作正常。但是我心中有一个关于arrayng-repeat. array of object工作的问题,如果我使用$scope.users = [];$scope.users=[{}]ng-repeat的工作方式不同。使用 $scope.users = [], view appears blank, $scope.users = [{}] 时,视图将正确显示。我已经为两者创建了小提琴链接。谁能解释一下这里到底发生了什么。

与 $scope.users = [ ] 的链接是:http://jsfiddle.net/9Ymvt/2799/
$scope.users = [[]]的链接是:http://jsfiddle.net/9Ymvt/2800/

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

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

{}在其空白ng-repeat中有一个对象,因此ng-repeat将遍历数组中的对象。 对象是否为空并不重要。 在这里,您的$scope.users = [ ]运行 1 次。

但在

users arrayng-repeat里面什么都没有,没有什么可以迭代的,所以$scope.users = []不打算迭代。

[{}] 是一个具有空对象的数组,因此它的长度为 1,并且

将循环它,而 [] 是一个长度为 0 的空数组,因此循环不会运行它。因此,当您使用 [{}] 运行时,将填充表单,因为角度可以遍历数组。

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

ng-repeat="person in users"

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

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

这:

$scope.users =  [{ }]

等于:

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

它只是包含项的数组声明。

它非常简单:),

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