我想使用angular将字段复制到另一个字段,所以我使用这个循环:
for (var k in $scope.customer) {
$scope.customer[k].fr = $scope.customer[k].en;
$scope.customer[k].es = $scope.customer[k].en;
}
但问题是循环只适用于普通字段(int,string ...),这意味着:循环不适合我对象中的列表和类。 有没有办法循环遍历字段以及我的对象中包含的所有类和列表?
更新
例如,我想将字段“en”复制到“fr”和“es”字段。
我的模特:CompanyName(en: String, fr: Option[String], es: Option[String])
要做到这一点,我应该写:
$scope.customer.Company.CompanyName.fr = $scope.customer.Company.CompanyName.en;
$scope.customer.Company.CompanyName.fr = $scope.customer.Company.CompanyName.es;
有什么方法可以使用循环来应用它吗?没有指定每个字段?
答案 0 :(得分:1)
您可以尝试使用我在此处实现的深层复制功能(我测试了它,它可以工作):
function deepCopyEn(src) {
if (src.hasOwnProperty("en")) {
src.fr = src.en;
src.es = src.en;
}
else {
if (src.constructor === Array) {
for (var i = 0; i < src.length; i++) {
deepCopyEn(src[i]);
}
}
else {
for (var prop in src) {
if(src.hasOwnProperty(prop)) {
deepCopyEn(src[prop]);
}
}
}
}
}
用法:
deepCopyEn($scope.customer);
您可以对其进行测试here。
答案 1 :(得分:0)
为什么不试试foreach循环:
$scope.customer.forEach(function(cust){
// work with cust
});
它将获得cutomer对象的所有属性。
答案 2 :(得分:0)
您可以使用angular.copy()
创建英文版的完整深层副本:
for (var k in $scope.customer) {
$scope.customer[k].fr = angular.copy($scope.customer[k].en);
$scope.customer[k].es = angular.copy($scope.customer[k].en);
}
稍后会覆盖其他语言的语言特定字段。她是[{1}}:http://www.tothenew.com/blog/angularjs-copy-vs-extend/
的来源