AngularJS - 检查ng-if的条件

时间:2016-11-22 18:35:46

标签: javascript angularjs angularjs-filter

如果他们检查了这样的条件,我需要显示/隐藏多个元素:

<div id="LineSingleDate" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.SingleDate; })"></div>
<div id="LineSpotlight" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.InSpotlight; })"></div>
<div id="LineSubtitle" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.Subtitle; })"></div>
<div id="LineResumeDescription" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.ResumeDescription; })"></div>
<div id="LineLocation" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.Location; })"></div>
<div id="LineCoordinatesGPS" ng-if="VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.CoordinatesGPS; })"></div>
<!--and 20 more others-->

但它给了我所有这些ng-ifs的错误:

  

angular.js:13920错误:[$ parse:syntax]语法错误:令牌'{'是   意外,期待[]]在表达式的第53列   [VM.PageFeatures.AvailableFields.SafeAny(function(e){return e.Id ==   VM.Constants.SingleDate; })]从[{return e.Id ==开始]   VM.Constants.SingleDate; })]。

我已经尝试使用{}和{{}}来支持这些条件,但它总是给我一个与之前不同的错误。

我该如何解决这个问题?

注1:每个变量和函数都存在且有效。

注意2:我不希望控制器上的每个div都有一个变量。

1 个答案:

答案 0 :(得分:1)

也许重构会有所帮助:

HTML

<div id="LineSingleDate" ng-if="VM.checkAvailability('SingleDate')"></div>
<div id="LineSpotlight" ng-if="VM.checkAvailability('InSpotlight')"></div>

控制器

VM.checkAvailability(fieldName) {
    return VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants[fieldName]; })
}