2

这是描述我在 Angularjs 中的动态绑定问题的 Plunker。

http://plnkr.co/edit/fGgtOZ5IrJVo9QasQALc?p=preview

在使用 Angularjs 之前,我习惯于使用如下输入名称/值来生成所需的数据结构以进行后端处理

<input type="text" name="computer[details][][purchaseddate]" />

<input type="text" name="computer[details][][warrantyperiod]" />

使用 Angularjs ng-model,可以绑定复杂的数据结构,例如

<input type="text" ng-model="computer.parts[0].name" />

但是,它不适用于如下动态属性:

<input type="text" ng-model="computer.details[0].name" />

Angular 一直告诉我,我正在尝试将属性“名称”设置为未定义的“详细信息 [0]”,我知道这一点,但是有什么方法可以与以前输入的名称/值获得相同的行为,我可以在其中指定动态属性无需先声明?

谢谢,

4

2 回答 2

3

绑定到尚不存在的属性有效。a.b.c即使 $scope.a 不存在,您也可以绑定。Angular 即时创建对象和属性。

<input type="text" ng-model="a.b.c" />

但是您正在尝试绑定到尚不存在的数组元素:

<input type="text" ng-model="a.b[0].c" />

Angular 将实例化该数组,然后将一个空对象推入其中,然后为其指定名称。显然这不起作用。

于 2013-06-25T17:03:05.367 回答
1

我遇到了同样的情况并尝试了一切。

这就是我能够在 2 个深度 ng-repeat 中获得动态值的方式:

JS:

$scope.newContact = {
    name: [],
    phone: [],
    email: [],
    notes: []
};

$scope.saveNewContact = function (idx) {
    console.log($scope.newContact.name[idx]);
};

HTML:

<input type="text" ng-model="newContact.name[$index]" />
<input type="text" ng-model="newContact.phone[$index]" />
<input type="text" ng-model="newContact.email[$index]" />
<input type="text" ng-model="newContact.notes[$index]" />
<button ng-click="saveNewContact($index)">Save</button>
于 2014-12-09T17:39:01.683 回答