如何在AngularJS中向现有对象添加内容

3
我将公司名称从一个表单添加到:
$scope.master = {};

使用
$scope.master = angular.copy(cmpy); 
// This gives me result as Object {cname: "Company 2"}

现在在另一个表单中,所有者细节我想要添加到$scope.master中。我已经尝试了pushconcat,但它们似乎不起作用。如果我再次使用copy,它只会覆盖现有数据。

3个回答

2
如果您使用的是AngularJS版本>=1.4.0,则可以使用extend功能,如下所示:
angular.extend($scope.master, $scope.ownerDetails);

这将把所有值从$scope.ownerDetails(或任何你获取业主详情的地方)复制到$scope.master

对于Angular 1.4.0以下的版本,您可以通过注入自己的extend方法来解决问题:

// This code is basically copied from AngualrJS 1.4.0 library
function baseExtend(dst, objs, deep) {
    var h = dst.$$hashKey;

    for (var i = 0, ii = objs.length; i < ii; ++i) {
        var obj = objs[i];
        if (!angular.isObject(obj) && !angular.isFunction(obj)) {
            continue;
        }

        var keys = Object.keys(obj);
        for (var j = 0, jj = keys.length; j < jj; j++) {
            var key = keys[j];
            var src = obj[key];

            if (deep && angular.isObject(src)) {
                if (angular.isDate(src)) {
                    dst[key] = new Date(src.valueOf());
                } else {
                    if (!angular.isObject(dst[key])) {
                        dst[key] = angular.isArray(src) ? [] : {};
                    }
                    baseExtend(dst[key], [ src ], true);
                }
            } else {
                dst[key] = src;
            }
        }
    }
    if (h) {
        dst.$$hashKey = h;
    } else {
        delete dst.$$hashKey;
    }
    return dst;
}

angular.merge = function(dst) {
    var slice = [].slice;
    return baseExtend(dst, slice.call(arguments, 1), true);
};

0

pushconcat用于数组,而$scope.master是一个对象。要添加另一个键:

$scope.master['owner_details'] = owner_details;

由于我正在使用这样的格式 - master.firstname,如果我使用 $scope.master['owner_details'],它会创建一个不必要的额外键级别。 - Stacy J

0

其他答案可以编程方式设置主变量,如果这是您想要的(由于您正在尝试推送等),那么这些答案都很好。

但是,如果您提到的“表单”是一个字段的HTML表单,则可以使用ngmodel将用户详细信息绑定到$scope.master.中。像这样:

<input type="text" ng-model="master.firstname" />

这只是给你的另一个选择。

祝一切顺利。


这本来是没问题的,但第一个表单只有一个输入字段,当点击提交时,它调用一个函数将该值存储在主控制器中。第二个表单调用另一个函数。如果我再次使用angular.copy,它会覆盖第一个表单的值。 - Stacy J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接