属性将应用于所有项目,而不仅仅是当前项目
Attributes are applied to ALL items instead of just current item?
我正在使用AngularJS,并试图记录各种物品的独特色调。我有一个项目阵列和一个颜色阵列:
$scope.item = [
{name:"Toy Car", colors:[]},
{name:"Toy Boat", colors:[])
];
$scope.colors = [
{id:"Red", intensity:256},
{id:"Green", intensity:256},
{id:"Blue", intensity:256}
];
我有一个输入,允许我改变每种颜色的强度。当我单击APPLY按钮时,颜色[]被复制到项目数组[0]中。colors.
<input type='number' ng-model='colors[0].intensity'> //repeat for each color RGB
<button ng-click='apply()'>APPLY</button>
$scope.apply = function(){
$scope.color_this = angular.copy($scope.colors, $scope.color_this);
$scope.item[0].colors = angular.copy($scope.color_this, $scope.item[0].colors);
$scope.color_this = []; // blank array to make room for the next RGB mix
};
在我转到下一个$scope.item[1].colors之前,这项操作非常有效。当我尝试设置$scope.item[1]的下一个颜色时,以前的项目颜色也会被覆盖。即:
$scope.item[0].colors === $scope.item[1].colors // evaluates to true
但我不想这样!我希望每件物品都能保持自己独特的颜色。我的逻辑有什么根本错误吗?为什么以前的项目颜色会被覆盖??
对我来说,这似乎与Javascript数组的深度复制问题有关。我建议跳过angular.copy()的第二个参数。查看此处的文档https://docs.angularjs.org/api/ng/function/angular.copy
像这样的。。。
$scope.apply = function(){
$scope.color_this = angular.copy($scope.colors);
$scope.item[0].colors = angular.copy($scope.color_this);
$scope.color_this = []; // This line is not needed since copy will create a new array each time, so you can remove this
};
试试看。
相关文章:
- Ajax聊天消息重复而不仅仅是更新
- 鼠标悬停事件影响列表中所有行中的按钮,而不仅仅是特定按钮
- 事件为所有项目而不仅仅是当前项目激发
- 在加载时显示,而不仅仅是在选中时显示
- 删除 HttpCookie 不仅仅是它的值
- 脚本选择所有输入,而不仅仅是复选框
- for 循环中的 if 语句都执行,而不仅仅是一个
- 当将函数传递给方法时,为什么使用匿名函数容器而不仅仅是原始函数有效
- .slideup()删除整个ul,而不仅仅是嵌套的li
- jQuery隐藏所有trs或td,而不仅仅是一个
- 使用Maven压缩所有内容,而不仅仅是源目录
- 从数组中删除双值,而不仅仅是javascript中的重复值
- 在全球范围内强制ng严格di,而不仅仅是在ng应用程序级别上
- Jquery Slider-获取滑块的每个数值?不仅仅是在mouseout上
- 我如何让jQuery在Facebook发布自动加载时做一些事情,而不仅仅是在页面加载时
- 手风琴中重置项目高度是't正确复位
- 如何使元素的宽度和高度为页面(文档)的100%,而不仅仅是窗口(浏览器)
- 在 Magnific 弹出窗口中打开所有图像,而不仅仅是发布图像
- 选择多个项目,而不仅仅是一个(angularJs)
- 属性将应用于所有项目,而不仅仅是当前项目