Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Javascript 角度JS$范围、数据绑定和变量更改。_Javascript_Angularjs_Data Binding_Angularjs Scope - Fatal编程技术网

Javascript 角度JS$范围、数据绑定和变量更改。

Javascript 角度JS$范围、数据绑定和变量更改。,javascript,angularjs,data-binding,angularjs-scope,Javascript,Angularjs,Data Binding,Angularjs Scope,所以我在Angular JS v1.4.0中开发了一个应用程序,我遇到了一个范围问题。有一个部分有一个表单需要提交,但是数据在发送之前需要修改。在调用服务器之前,我正在尝试在javascript中执行此操作 我有$scope.msgEditor,它是表单所需的一组不同值的对象,以及消息变量本身。重要部分如下所示: msgEditor [ msg: { groups: { selected: { 0: '1',

所以我在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完全不改变,并从第二个函数返回formattedMessage,这样就可以将其放入$http调用中。但是,join会更改消息、formattedMessage和$scope.msgEditor.msg

我做了更多的测试,看看发生了什么:

$scope.formOnSubmit = function () {
    $scope.test = $scope.msgEditor.msg;
    var formattedMessage = $scope.test;
    formattedMessage = formatDataForSave(formattedMessage);
};
并发现对formattedMessage所做的更改将更改$scope.test,这将更改$scope.msgEdtior.msg


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

我相信在javascript中将参数传递到函数中会让您感到困惑:在javascript中,所有参数都是通过引用传递的,所以结果就是您所经历的。查看
角度复制功能

我无法对此进行测试,但您可以尝试:

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

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

    return message;
}

成功了。太好了,谢谢!我不知道该找什么来解决这个问题。太好了。很高兴我能帮忙。:)