AngularJS中的ng类出现问题,它没有正确更新。
视图:
<div class="cal-day" ng-repeat="day in schedule">
...
<div class="entry" ng-click="entryDetails(entry)" ng-repeat="entry in day.blockGrid"
ng-class="{'selected': isSelected(entry), 'bg-{{entry.color}}': entry, 'bg-empty': !entry}">
{{isSelected(entry)}}
...
</div>
</div>
JS:
$scope.entryDetails = function(entry) {
$scope.entryForDetails = entry;
};
$scope.isSelected = function(entry) {
return $scope.entryForDetails === entry;
};
CSS classselected实现良好-当我在ng class中将isSelected(entry)替换为true时,该类将得到正确应用
与isSelected()函数相同-它根据是否选择项目正确打印true或false
即使这两个元素都可以工作,但它们以某种方式拒绝协同工作,并且当isSelected(entry)返回trueelected
编辑:
存储在天中的模型
{
"date": "6.6.2013",
"blockGrid": [
null,
null,
null,
null,
null,
null,
{
"group": "ABCD",
"subjectName": "AB CD",
"subjectShorthand": "PW",
"type": "c",
"number": 4,
"profName": "ABAB",
"date": "2013-06-05T22:00:00.000Z",
"venue": "329 S",
"timetableBlock": 7,
"color": 16,
"_id": "51c3a442eb2e46a7220000e2"
}
]
}
正如您所看到的,它是一个由7个元素组成的数组,这些元素要么为null,要么包含条目对象。
我忘了提一下,我的观点的张贴部分在另一个ng重复中。上面的视图代码片段现在进行了扩展以反映这一点。
Ng类,正如您所设置的,想要计算布尔表达式,对象中的第一个表达式已经完成了这一操作。但是,接下来的两个表达式试图计算entry
对象,而不是返回true/false的isSelected(entry)
的结果。
所以要纠正:
ng-class="{'selected': isSelected(entry), 'bg':isSelected(entry), 'bg-empty':!isSelected(entry)}"
也就是说,除非你在尝试其他东西。还要注意,我删除了bg-{{entry.color}}
。我不知道如何在ng类中评估scope属性,也不知道它是否可能。
这是正在工作的plunker演示。这可能不是你想要的,但它至少可以帮助你解决问题。