Javascript 角度JS$范围、数据绑定和变量更改。
所以我在Angular JS v1.4.0中开发了一个应用程序,我遇到了一个范围问题。有一个部分有一个表单需要提交,但是数据在发送之前需要修改。在调用服务器之前,我正在尝试在javascript中执行此操作 我有$scope.msgEditor,它是表单所需的一组不同值的对象,以及消息变量本身。重要部分如下所示: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',
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;
}
成功了。太好了,谢谢!我不知道该找什么来解决这个问题。太好了。很高兴我能帮忙。:)