Angular JS $作用域、数据绑定和变量变化
Angular JS $scope, databinding, and variables changing.
所以我有一个应用程序,我在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调用中。但是,连接会更改message、formattedMessage和$scope.msgEditor.msg
我做了更多的测试,看看发生了什么:
$scope.formOnSubmit = function () {
$scope.test = $scope.msgEditor.msg;
var formattedMessage = $scope.test;
formattedMessage = formatDataForSave(formattedMessage);
};
并发现对formattedMessage所做的更改会改变$scope。$scope. msgedtio .msg.
任何关于为什么会发生这种情况,或者如何防止它的方向都将是惊人的。
我相信你对javascript中传入函数的参数感到困惑:在javascript中,所有参数都是通过引用传递的,所以结果就是你所经历的。看一下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;
}
相关文章:
- 重新加载页面时Javascript变量发生变化
- 如何检测和打印变化变量LESS
- 当变量发生变化时运行PHP
- 使用 jquery 检测变量变化
- 如果两个值都会动态变化,则用变量替换某个字符串的一部分 - Javascript
- 为什么 Angular 没有注意到这个变量的值发生了变化
- 如何防止变量在 JavaScript 中发生变化
- 为什么这个变量在函数之间传递时会发生变化
- 指令侦听控制器变量的变化
- JAVASCRIPT 变量在函数中没有变化
- 双向绑定不识别 AngularJS 中的变量变化
- 角度范围之外的变量的变化
- 设置路由时,角度范围变量会发生变化
- PHP 变量根据设备宽度而变化
- 观察Jquery/Javascript中的变量变化
- Javascript -在变量变化时播放声音
- jQuery中奇怪的变量变化
- Angular JS $作用域、数据绑定和变量变化
- Angular不会识别forEach循环中的作用域变量变化
- 如何使动态视图在作用域变量变化时正确更新