在数组中绑定具有相同对象的对象

时间:2015-03-20 14:06:31

标签: angularjs

我使用angular 1.3.x。

我有一个很大的形式。在第一步中,我可以编辑表单中的人名,以便我有一个对象人绑定到范围,输入与ng-model:

$scope.person = { name: 'John' };

稍后,在同一表格中,我有一个联系人列表(就像上面这样的人),在这个列表中,我可以再次拥有同一个人。

我希望可以在表单的第一部分或最后部分编辑人员:如果我在第一个输入中更改名称,则必须在第二个输入中更改名称,反之亦然。

我尝试做类似的事情:

$scope.contacts = [];
$scope.contacts.push(person);

第二个表单已正确填写,但如果我在第一个输入字段中更改名称,则不会更新第二个输入字段。

知道怎么做吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

对象未正确更新,因为它们是具有单独引用的不同对象。我找到的一个解决方法是确保在填充数组数据后绑定到完全相同的对象。

填充$scope.contacts后,应将$scope.person设置为该数组中包含的正确对象。我使用这种方法遍历数组并将匹配的对象设置为彼此相等。然后绑定正确更新。

.success(function (contacts) {
    $scope.contacts = contacts;

    //loop through and find first match, set them equal
    var foundMatch = $scope.contacts.some(function(contact) {
        if (areSame(contact, $scope.person)) { //you define areSame() logic
            $scope.person = contact;
            return true;
        }
        return false;
    });

由于您可以在按下按钮后设置person,因此您也必须在按下按钮后使用循环搜索逻辑。