Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单向绑定angularjs_Angularjs - Fatal编程技术网

单向绑定angularjs

单向绑定angularjs,angularjs,Angularjs,我在选择中有一个员工列表,用户可以在其中选择一名员工并编辑其详细信息。然后他通过一个按钮触发一个ajax调用,这样服务器就可以更新数据库中的记录 我正在使用ngModel绑定我的员工列表中的字段和数据,但如果在数据库端更新失败,则会出现问题,因为我的员工列表是通过双向绑定更新的 当用户在“选择并更新我的员工”列表中选择一个元素时,是否有方法初始化我的字段?仅当我收到响应时才进行 以下是我的指令(视图)中的显式代码: 指令呢 app.directive('employeeList', ['empl

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

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

当用户在“选择并更新我的员工”列表中选择一个元素时,是否有方法初始化我的字段?仅当我收到响应时才进行

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

指令呢

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.copy
ng change
。我已将
ng change
添加到select中,在那里我将
selectedEmployee
复制到作为表单模型提供的
selectedEmployeeDirty
。然后在服务的回调中,我更新了
selectedEmployee

非常简单。对象在javascript中通过“引用”共享。 事实上,这是一个C指针——或者类似的东西——如何共享对象的内存位置。 如果您这样做:

var a = {}, 
b = a; 
a.toto = true; 
console.log(b); 
你会看到

b = { toto: true } 
记住这一点

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


像以前一样使用ng模型,保存更改,并且仅在回调时更新原始模型:-)

非常简单。对象在javascript中通过“引用”共享。事实上,这是一个C指针——或者类似的东西——如何共享对象的内存位置。如果这样做:var a={},b=a;a、 toto=正确;控制台日志(b);您将在控制台中看到b.toto=true。记住这一点。现在,我们如何在不更新原始对象的情况下隔离已编辑的对象?复制一份!angular.copy是一个朋友,它会将src的每个属性复制到dst。像你一样使用ng模型,保存更改,并且只在回调时更新原始模型:-)@Nico为什么不做一个回答而不是评论?因为我认为我没有权利:)我会尝试更新。这个想法很好,但请注意我视图中的
选择
。你能写出确切的解决方案吗?因为我不知道只有当有人从员工中选择项目时如何更新
输入
字段。我把副本放在哪里?所有的事情都是在后台通过angular完成的。好的,我用你的想法找到了一个解决方案。我会接受它并用解决方案更新我的问题。
b = { toto: true }