2016-11-22 3 views
0

мне нужно, чтобы показать/скрыть несколько элементов, если они проверяют состояние так:AngularJS - проверить состояние на нг-если

<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--> 

Но это дает мне эту ошибку для всех этих нг-КСФ:

angular.js:13920 Error: [$parse:syntax] Syntax Error: Token '{' is unexpected, expecting [)] at column 53 of the expression [VM.PageFeatures.AvailableFields.SafeAny(function(e) { return e.Id == VM.Constants.SingleDate; })] starting at [{ return e.Id == VM.Constants.SingleDate; })].

Я уже пытался использовать {} и {{}}, поддерживая условия, но всегда дает мне другую ошибку, подобную предыдущей.

Как я могу это решить?

ПРИМЕЧАНИЕ 1. Каждая переменная и функция существуют и работают.

ПРИМЕЧАНИЕ 2. Я не хочу иметь переменную для каждого div на моем контроллере.

+7

вы действительно должны иметь метод на вашей возможности для этого. –

+1

согласился. Мало того, что это невозможно прочитать, оно не поддерживается и, вероятно, является частью вашей ошибки. –

+0

Хорошо. Я не знал, что это не читается, в других случаях это работает. Огромное спасибо – Ninita

ответ

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]; }) 
} 
Смежные вопросы