1

我正在使用 Angular 来显示用户表。我创建了一个表单来添加和编辑用户。单击用户行时,我将该特定用户传递给控制器​​中的函数:

$scope.editUser = function (selectedUser) {
    $scope.userToAdd = selectedUser;
};

在上面的函数中,我创建了一个新对象 $scope.userToAdd。问题是一旦 selectedUser 被传递到 $scope.userToAdd 中,在绑定到 userToAdd 的表单中发生的更改就会反映在 selectedUser 中。这给我带来了麻烦,因为当有人更改值然后单击取消时;更改现在反映在用户表上。这种场景的 Angular 最佳实践是什么。

4

1 回答 1

1

您可以angular.copy用来制作您正在编辑的用户的副本。然后,当他们单击保存时,您将用户复制回来:

$scope.editUser = function (selectedUser) {
    // Note: you might want to save the user's index or something so you can
    // know where to return the user, like this:
    $scope.userToAdd = angular.copy(selectedUser);
};

如果您在循环中呈现用户,您可以执行以下操作:

<li ng-repeat="user in users">
    ...
    <button ngclick="editUser(user, $index);">Edit</button>
</li>

JavaScript:

$scope.editUser = function(selectedUser, index) {
    // Note: you might want to save the user's index or something so you can
    // know where to return the user, like this:
    $scope.userToAdd = angular.copy(selectedUser);
    $scope.userToAddIndex = index;
};

$scope.saveUser = function() {
    // You may want to user angular.copy() here again, to prevent accidental
    // modification of the user.
    $scope.users[$scope.userToAddIndex] = $scope.userToAdd;
};
于 2013-08-08T17:22:37.963 回答