我在AngularJS中遇到了ng-class的问题 – 它没有正确更新.
视图:
<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类很好 – 当我用ng-class中的true替换isSelected(entry)时,类被正确应用.
与isSelected()函数相同 – 它根据是否选中该项正确打印true或false.
即使两个元素都有效,它们也会以某种方式拒绝协同工作,并且当isSelected(entry)返回true时,div类不会更新为选中状态.
编辑:
模型存储在白天
{ "date": "6.6.2013","blockGrid": [ 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" } ] }
解决方法
正如你设置的那样,Ng-class想要评估一个布尔表达式,它是你对象中的第一个表达式所做的.但是,接下来的两个表达式试图评估条目对象,而不是isSelected(entry)的结果,它返回true / false.
所以要纠正:
ng-class="{'selected': isSelected(entry),'bg':isSelected(entry),'bg-empty':!isSelected(entry)}"
也就是说,除非你正在尝试别的东西.另请注意,我删除了bg – {{entry.color}}.我不知道如何评估ng-class中的范围属性,或者甚至是否可能.
Here is the working plunker demo.这可能不是你想要的,但它至少可以帮助你排除故障.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。