绑定angularjs的一种方式

时间:2014-08-03 17:24:02

标签: angularjs

我在select中有一个员工列表,用户可以在其中挑选员工并编辑其详细信息。然后他通过按钮触发ajax调用,因此服务器可以更新数据库中的记录。

我与ngModel字段和我的员工列表中的数据绑定,但如果数据库端的更新失败则会出现问题,因为我的员工列表是通过双向绑定更新的。

当用户在select中选择一个元素并且仅在我得到响应时更新我的​​员工列表时,有没有办法初始化我的字段?

这是我的指令(视图)中的显式代码:

select(ng-model='selectedEmployee' ng-options="employee.name for employee in employees")

form(role='form')
        input(type='input' ng-model='selectedEmployee.userId')
        input(type='input' ng-model='selectedEmployee.name')
        button (type='button' ng-click='updateEmployee()') update

和指令

app.directive('employeeList', ['employeeServices',

    function(employeeServices) {
        var employeeListController = function($scope) {
            employeeServices.getEmployees()
                .success(function(result) {
                    $scope.employees = result.data
                })
                .error(function(err) {
                })

            $scope.selectedEmployee = null
            $scope.updateEmployee = function() {
                employeeServices.updateEmployee({
                    userId: $scope.selectedEmployee.userId,
                    name: $scope.selectedEmployee.name
                })
                    .success(function(data) {
                    //I want to update my $scope.employees here
                    })
                    .error(function(data) {
                    //Otherwise I show some error message
                    })
                    .then(function() {
                        $scope.selectedEmployee = {}
                    })
            }
        }

        return {
            ...
            controller: employeeListController
        }
    }
])

解决方案

因此,为了解决问题,我使用了angular.copyng-change。我已将ng-change添加到select中,我将selectedEmployee复制到selectedEmployeeDirty,我将其作为我的表单的模型提供。然后在服务的回调中,我更新了selectedEmployee

1 个答案:

答案 0 :(得分:0)

很简单。 javascript中的对象通过“引用”共享。 实际上,这是一个C指针 - 或类似的东西 - 如何共享对象的内存位置。 如果你这样做:

var a = {}, 
b = a; 
a.toto = true; 
console.log(b); 

你会看到

b = { toto: true } 

记住这一点。

现在,我们如何在不更新原始对象的情况下隔离您编辑的对象?复制一份! angular.copy是一个朋友,并将src的每个属性复制到dst。

像你一样使用ng-model,保存更改,并且只在回调时更新原始版本: - )