angularjs - AngularJS - 如何在 ng-repeat 中正确使用 ng-show?我的布尔值没有更新
问题描述
我有一个循环超过 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 中的更改,我只是不知道如何让它检查更改,也许有一种更简洁的方法来获取我的内容努力去做!
谢谢
添加小提琴:http: //jsfiddle.net/7zymp2gq/1/
解决方案
好的,在这里您的代码已修复并可以正常工作:
http://jsfiddle.net/7zymp2gq/4/
该功能基本上有两点错误$scope.pickColor
:
- 循环进入了不存在的字段,我改变
<=
了<
- 它正在更新
array[index]
,它应该在更新$scope.colorBoxes[index]
推荐阅读
- powershell - 在输出报告中显示一次列标题
- java - 将 Google Drive API 与 scala play 项目一起使用
- node.js - 启用无头时找不到选择器 - Puppeteer
- node.js - 问题:Router.use 需要一个中间件函数,但有一个 obj
- arrays - 在结构中改变数组的最佳方法?
- python - jax中的高阶多元导数
- java - Spring Boot 中无法处理 FileSizeLimitExceededException
- arrays - 如何在 C 中获取动态数组的大小?
- python - 我如何计算每行中不同的特定字符的出现
- python - sklearn jaccard_score 给出错误的结果