【发布时间】:2018-05-25 21:27:26
【问题描述】:
我有一个循环超过 9 个 div 的 ng-repeat,每个 div 都有不同的颜色。
当用户点击一个 div 时,它的颜色将成为一个部分的背景颜色。
我正在尝试这样做:
重复的数组结构如下:
interface colorBoxes {
color: string;
isSelected: boolean;
}
在视图中:
<div ng-repeat="s in vm.colorBoxes track by $index">
<div class="pointer" ng-click="w.backgroundColor = s.color; vm.pickColor(s, $index)" ng-style='{"background-color": s.color}'>
<i ng-show="vm.isColorSelected($index) === true" class="fa fa-check fa-1x checkOnSelectedLegend"></i>
</div>
</div>
在控制器中:
pickColor(array: any, index: number) {
for(var i = 0; i<=this.colorBoxes.length; i++) {
this.colorBoxes[i].isSelected = false;
}
array[index].isSelected = true;
}
我使用这个函数,所以当你点击一个 DIV 时,它的变量:isSelected 变为 true,而所有其他 DIV 的变量都设置为 false。
我在带有 ng-show 的视图中使用此变量,以在当前选择的 DIV 上显示一个复选标记,但这不起作用,在我放入该 ng-show 的函数下方
isColorSelected(index:number):boolean {
return this.colorBoxes[index].isSelected
}
我做错了什么?
总而言之,我希望当您单击一个框时,它的颜色字符串会应用于另一个元素(与我的代码一起正常工作),然后,该框需要在其顶部显示一个复选标记,我尝试使用上述功能,通过在单击时将isSelected var 设置为 true,但它不起作用。
我很确定问题是 Angular 没有检查该 ng-show 中的更改,我只是不知道如何让它检查更改,也许有一种更简洁的方法来获取什么我正在努力!
谢谢
【问题讨论】:
-
为什么在函数中使用this.colorBoxes而不是vm.colorBoxes?
-
添加了 jsFiddle jsfiddle.net/7zymp2gq/1
-
@Gobli 因为在这个项目中我们将控制器的 vm 更改为 this,我们只在视图中使用 vm 来调用控制器中的东西
标签: angularjs twitter-bootstrap