javascript - AngularJS/Javascript 拼接的奇怪行为

标签 javascript angularjs

我正在拼接手机类型列表。我有一个由 $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/

相关文章:

javascript - 在开发模式下阻止本地主机上的 Google 广告

javascript - 如何使用jQuery来防止空格键进入空格?

javascript - 输入=范围删除文本字段

angularjs - 智能表分页不适用于服务器端过滤

javascript - 使用 spring 映射 url 填充下拉列表

javascript - 如果使用javascript在 "option"下拉列表中选择 "select",如何显示弹出窗口?

angularjs - 如果我单击页面中的任何位置,当模式弹出窗口关闭时重置表单

javascript - 如何使用 AngularJS 从 JSON 提要中填充选择下拉列表?

JavaScript 访问 Angular 范围返回 "undefined"- 异步问题?

javascript - 仅当用户向后而不是向前时如何触发事件