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;
答案 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) {...}