当更改复制变量的值时,它也在更改 AngularJS 中的主变量值
when changing value of copied variable it is also changing main variable value in angularjs
我的情况很奇怪。我有一个对象数组,我使用 angular.forEach 来修改每个对象价格键值,但当我在每个对象中更改它时,它也在更改主数组对象。
看看代码,你就会明白我想说什么。
var option_1_val = $scope.options.option_1_val;
var option_2_val = $scope.options.option_2_val;
console.log('genies',sc.genies);
var new_arr = [];
var each ;
each = sc.genies;
angular.forEach(each,function(val,key){
var ob = {};
ob = val;
var priceA = angular.fromJson(ob.price);
console.log('price',priceA);
var option = option_1_val.replace(" ","-")+","+option_2_val.replace(" ","-");
console.log(option);
ob.price = priceA[option];
console.log(ob);
new_arr.push(ob);
});
option = 'Non-Vegetarian,' (after calculating)
sc.genies = [{"gs_id":"3","user_id":"25","service_id":"7","price":"{'"Vegetarian,Bengali'":'"200'",'"Vegetarian
,Chinese'":'"3100'",'"Vegetarian,Gujarati'":'"800'",'"Vegetarian,Italian'":'"100'",'"Vegetarian,Maharashtrian
'":'"100'",'"Vegetarian,Punjabi'":'"100'",'"Vegetarian,-South-Indian'":'"300'",'"Vegetarian,Thai'":'"100
'",'"Non-Vegetarian,Bengali'":'"1100'",'"Non-Vegetarian,Chinese'":'"3100'",'"Non-Vegetarian,Gujarati
'":'"100'",'"Non-Vegetarian,Italian'":'"100'",'"Non-Vegetarian,Maharashtrian'":'"100'",'"Non-Vegetarian
,Punjabi'":'"100'",'"Non-Vegetarian,-South-Indian'":'"80'",'"Non-Vegetarian,Thai'":'"100'",'"Jain,Bengali
'":'"2100'",'"Jain,Chinese'":'"2100'",'"Jain,Gujarati'":'"4100'",'"Jain,Italian'":'"100'",'"Jain,Maharashtrian
'":'"100'",'"Jain,Punjabi'":'"100'",'"Jain,-South-Indian'":'"800'",'"Jain,Thai'":'"100'"}","min_price"
:"80","max_price":"4100","username":"abdul quadir","email":"abdul.quadir@kiozen.com","rating":"3"}]
现在当我重复 sc.genie 时,我已经在一个新的变量中采用了它,已经"每个",然后我将每个数组的"价格"键更改为未定义,但奇怪的一点是当我在控制台中看到 sc.genies 中的价格值也更改为"未定义"。哼!
我希望你明白我的意思,请帮助我为什么会这样。
谢谢
当每个值的更改不影响原始值时,您应该使用 angular.copy
然后。 因为angular.copy
在新变量中分配旧值而不引用。
喜欢:
var each ;
each = angular.copy(sc.genies);
而不是
each = sc.genies;
有一个简单的答案。"两个"值变化的原因是因为它实际上是同一个对象。此行val
的变量angular.forEach(each,function(val,key){ ...
包含指向对象的指针。它不是另一个对象。它是同一个对象,只能通过不同的变量名访问。
如果确实希望original
和working copy
是不同的对象,则需要手动创建具有相同值的新实例。
您可以像这样创建对象的副本(适用于简单对象):
var copy = JSON.parse(JSON.stringify(originalObject));
或者如上面的评论所示,您可以使用 angular.copy(source, destination)
.请参阅文档 https://docs.angularjs.org/api/ng/function/angular.copy
相关文章:
- JavaScript:单击时相对于父级增加变量值
- 如何通过ajax增加/减少PHP变量值并重新加载函数
- 如何从特定页面中提取php变量值
- JavaScript模数未正确递增变量值
- AngularJS:根据变量值进行连接
- 如何在 AngularJS 中拼接变量值
- Angularjs 变量值未更新
- 当更改复制变量的值时,它也在更改 AngularJS 中的主变量值
- 如何将 angularjs 变量值获取到其他.js文件
- Angularjs 视图变量值没有变化
- 在AngularJS中的$http成功回调之外无法访问$scope变量值
- 使用angularjs动态改变变量值
- AngularJS工厂变量值赋值会破坏绑定
- 在angularjs中,最佳实践是将简单的变量值传递给另一个作用域
- AngularJS变量值在视图中没有更新
- AngularJS:如何在使用路由时更新变量值
- AngularJS改变注入的全局变量值
- HTML没有显示angularjs的变量值
- AngularJS:使用另一个's变量值来命名一个变量
- 获取动态作用域变量值angularjs