【问题标题】:Angular JS $scope, databinding, and variables changing.Angularjs $scope、数据绑定和变量变化。
【发布时间】:2015-10-22 02:20:06
【问题描述】:

所以我有一个正在使用 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 更改了 message、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 angularjs data-binding angularjs-scope


    【解决方案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;
    }
    

    【讨论】:

    • 做到了。完美谢谢!我不知道要寻找什么来解决问题。
    • 完美。很高兴我能帮助你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多