如何使用AngularJS使用变量动态创建对象?

时间:2015-06-11 19:57:49

标签: angularjs

Javascript object creation on the fly

create objects on the fly with angularjs

好的,是的,我可以动态创建对象。但我很难将其实现到我自己的代码中。这就是我所拥有的:

var holdBuilding = $scope.m1Special.Buildings;
var c = 0;
$scope.m2Info = {};

angular.forEach(holdBuilding,function(){
    if($scope.m1Special.Buildings[c].loc=="Northern"){
        alert(holdBuilding[c].name);
        $scope.m2Info=[{
            name:holdBuilding[c].name;
            link:holdBuilding[c].link;
        }];
        c++;
    };
});

我的代码似乎比第二个更像第一个链接,但第二个使用Angular。我认为他做的事与我不同。或许我只是接近这个错误。

当我运行代码时,Angular完全破坏了。但是,如果我注释掉这一部分:

    $scope.m2Info=[{
        name:holdBuilding[c].name;
        link:holdBuilding[c].link;
    }];

然后代码运行,我能够看到警报正确警告名称。它只是不喜欢对象构建部分。我做错了什么?

当Angular中断时我得到的错误是:

  在属性列表

之后

SyntaxError:missing}

换行:

name:holdBuilding[c].name;

2 个答案:

答案 0 :(得分:1)

替代。 1:

$scope.m2Info.name = holdBuilding[c].name;
$scope.m2Info.link = holdBuilding[c].link;

您已有一个对象,您只需要设置属性。

替代。 2:

$scope.m2Info = {
                  name: holdBuilding[c].name,
                  link: holdBuilding[c].link
                };

要定义包含属性的新对象,请遵循语法name: value,。最后一个属性不需要逗号。

答案 1 :(得分:0)

如果要替换整个数组或对象,则应使用angular.copy。这将更新对原始对象的引用。

此外,您无需手动跟踪迭代器。 angular.forEach函数包含对象作为第一个参数。

var buildings = $scope.m1Special.Buildings;
$scope.m2Info = [];

angular.forEach(buildings, function(building) {
    if (building.loc=="Northern") {
        alert(building.name);
        angular.copy([{
            name:building.name;
            link:building.link;
        }], $scope.m2Info);
    };
});

应该注意$scope.m2Info始终只包含buildings数组中的最后一个对象。您可能希望改为使用$scope.m2Info.push(building);

编辑:你也可以通过forEach函数中的第二个参数获取密钥angular.forEach(buildings, function(building, key) {...}