Angular JS $范围,数据绑定和变量更改。

时间:2015-07-30 15:56:40

标签: javascript angularjs data-binding angularjs-scope

所以我有一个APP正在Angular JS v1.4.0中工作,我遇到了一个范围问题。有一个部分有一个需要提交的表单,但数据需要在发送之前进行修改。我正在尝试在调用服务器之前在javascript中执行此操作。

我有$ scope.msgEditor,它是表单所需的一堆不同值的对象,以及消息变量本身。重要的部分看起来像这样:

msgEditor [
    msg: {
        groups: {
            selected: {
                0: '1',
                1: '2',
            }
        }
    }
]

我正在尝试使用这个$ scope变量,将其分配给局部变量,然后开始解析这样的数据:

$scope.formOnSubmit = function () {
    formattedMessage = formatDataForSave($scope.msgEditor.msg);
};

function formatDataForSave(message) {
    message.groups = message.groups.selected.join(', ');

    return message;
}

我想要发生的是,$ scope.msgEditor.msg完全没有改变,而且FormatMessage是从第二个函数返回的,因此它可以放入$ http调用。但是,连接更改消息,formattedMessage和AND $ scope.msgEditor.msg

我做了一些测试,看看发生了什么:

$scope.formOnSubmit = function () {
    $scope.test = $scope.msgEditor.msg;
    var formattedMessage = $scope.test;
    formattedMessage = formatDataForSave(formattedMessage);
};

发现对formattedMessage所做的更改会改变$ scope.test,这会改变$ scope.msgEdtior.msg。

关于为什么会发生这种情况的任何方向,或者如何防止这种情况都会令人惊讶。

1 个答案:

答案 0 :(得分:1)

我相信你对于在javascript中将参数传递给函数感到困惑:在javascript中,所有参数都通过引用传递,因此结果就是你所经历的。看看angular.copy功能。

https://code.angularjs.org/1.3.17/docs/api/ng/function/angular.copy

我无法测试,但您可以尝试:

$scope.formOnSubmit = function () {
    var msgCopy = angular.copy($scope.msgEditor.msg);
    formattedMessage = formatDataForSave(msgCopy);
};

function formatDataForSave(message) {
    message.groups = message.groups.selected.join(', ');

    return message;
}