使用AngularJS"copy()"来避免引用问题

pet*_*ter 16 javascript angularjs angularjs-scope

我正在显示一个项目列表,每个项目旁边都有一个"编辑"按钮.单击它可打开角度ui模式窗口,用户可以更改特定项目的某些属性.

现在,让我感到困惑的是,当在这个编辑窗口中输入时,项目列表中的特定项目立即反映了这些变化.当用户在模态中单击"确定"时,我只希望它更新,如果用户选择"取消",则根本不需要更改.

我的解决方法使用copy来制作所选项目的副本,然后将其作为视图的模型:

var modalInstance = $modal.open({
    templateUrl: 'scripts/app/views/editBond.html',
    controller: function ($scope, $modalInstance, bond) {
        $scope.bond = angular.copy(bond);
        $scope.ok = function () {
            $modalInstance.close($scope.bond);
        };
        $scope.cancel = function () {
            $modalInstance.dismiss('cancel');
        };
    },
    resolve: {
        bond: function () {
            return bond;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

是否使用angular.copy()适当避免此类问题?这是一个范围问题吗?

Chr*_*oph 13

angular.copy()是的,使用在这里绝对合适.如果你想要更高级的东西,你可能想要检查角度历史