我正在拼接手机类型列表。我有一个由 $scope.phoneTypeList 定义的原始列表。在我的实际应用程序中,我通过 AJAX 获取列表,但我已将其定义为本示例的对象。
然后我有一个名为 $scope.addPhoneType 的空列表。我将phoneTypelist 中的数据分配到$scope.addPhoneType 中,然后运行for 循环。 for 循环采用用户电话类型的数组。如果它在列表中,它将拼接 addPhoneType。例如,如果用户有 DEFAULT,它会将其从 addPhoneType 中删除。
我遇到的问题是当我拼接addPhoneType时它也会拼接phoneTypeList。例如,phoneTypeList 变为 =["DDI", "MOBILE","FAX"] ,根本不应该碰它。
这就像它绑定(bind)到addPhoneType。我以前从来没有遇到过这个?这是正常行为吗?有人有办法解决吗?预先感谢,任何建议表示赞赏。
我的代码:
$scope.editCompany = function(){
$scope.phone = [{phone_type_id:"DEFAULT",number:"1123"}]
$scope.phoneTypeList = ["DDI", "DEFAULT", "MOBILE","FAX"];
$scope.addPhoneType =[];
$scope.addPhoneType = $scope.phoneTypeList;
for (x=0;x<$scope.phone.length;x++){
var phoneType = $scope.phone[x].phone_type_id;
var index = $scope.addPhoneType.indexOf(phoneType);
if (index >= 0){
$scope.addPhoneType.splice(index,1);
}
}
console.log($scope.phoneTypeList);
}
最佳答案
您看到的行为是完全正常的,因为非基元在 javascript 中是“通过引用传递”的。请查看这个问题及其答案 - Setting one object equal to another object with the assignment operator in Javascript
为了避免这种情况,您可以尝试使用 angular.copy
( https://docs.angularjs.org/api/ng/function/angular.copy ),这会在源中创建目标对象的深拷贝,从而取消对目标的引用。
请参阅此链接了解更多信息 - http://weblog.west-wind.com/posts/2013/Sep/16/JavaScript-Arrays-References-and-Databinding-in-Angular
关于javascript - AngularJS/Javascript 拼接的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046277/