2014-05-25 3 views
1

Я хотел бы использовать угловое отображение/скрытие или удаление родительского div в зависимости от содержимого дочернего div.ngAngular-js Скрыть родительский элемент, если дочерний элемент пуст

<div id="display-wrapper"> 
    <div class="display-title">{{SELECTION.TITLE}}</div> 
    <div class="display-text">{{selection.text|| SELECTION.NO_TEXT}}</div> 
</div> 

В зависимости от того, что пользователь выбрал в окне поиска, div будет заполнен данными. Иногда данных для этих отдельных разделов не будет. Я рад использовать ngShow или ngIf, так как это не повлияет на отображение или логику. Итак, если дочерний div-текст-текст пуст, я хочу, чтобы родительский div был удален или скрыт.

Я попытался захватить innerHTML или innerText, и хотя я могу сделать это для родительского div, я не могу заставить родительский div работать в зависимости от содержимого дочернего элемента.

Добавление после предложения.

Возможно ли, что мой сайт вмешивается? Если я попробую следующее по jsfiddle, он будет вести себя так, как я хочу.

<div id="display-wrapper" ng-show='{{selection.text}}'> 
    <div class="display-title">{{SELECTION.TITLE}}</div> 
    <div class="display-text">{{selection.text|| SELECTION.NO_TEXT}}</div> 
</div> 

по существу, если есть значение, присвоенное selection.text в Див шоу, если либо selection.text не назначается или присваивается пустая строка, то DIV не показывает.

Когда я пытаюсь это сделать на сайте, я получаю следующий код.

(1) Когда selection.text = "Я должен быть виден"

<div id="display-wrapper" ng-show="I should be visible" style="display: none;"> 
    <div class="display-title ng-binding"> 
    TITLE 
    </div> 
    <div class="display-text" ng-binding"> 
    I should be visible 
    </div> 
</div> 

(2) Когда selection.text = ""

<div id="display-wrapper" ng-show="" style="display: none;"> 
    <div class="display-title ng-binding"> 
    TITLE 
    </div> 
    <div class="display-text" ng-binding"> 
    no user data 
    </div> 
</div> 

(2) делает то, что он должен do и не отображать, (1) должен отображаться как ng-show = «Я должен быть видимым», но код сгенерировал стиль = «display: none»;

Любая помощь пожалуйста?

+2

'ng-show = '{{selection.text || SELECTION.NO_TEXT || SELECTION.TITLE}}'' не работает? (если это становится слишком сложным, переместите условие в контроллер 'ng-show = 'sectionIsEmpty()'' или model 'ng-show = 'sectionIsEmpty'') – Thilo

+0

мы можем игнорировать SELECTION.TITLE Я пробовал варианты на ng- show = '{{selection.text || SELECTION.NO_TEXT}', без радости. SELECTION.NO_TEXT заполняет пустой div «без пользовательских данных». когда я использую приведенное выше, я получаю ng-show = «WHATEVER USER HAD ADDED» или ng-show = «никаких пользовательских данных», и div отображается. Если я изменяю его на ng-show = '{{selection.text || ""}', я получаю ng-show = "WHATEVER USER HAD ADDED" или ng-show = "", и в обоих случаях я получаю style = «display: none» добавляется в div, и во всех случаях div не отображается. – Niccolo

+1

oops.Вероятно, 'ng-show = 'selection.text || SELECTION.NO_TEXT'' (без фигурных скобок). – Thilo

ответ

1
<div id="display-wrapper" ng-show='{{selection.text}}'> 

Похоже, что это приводит к двойной интерполяции. {{ }} предназначен для интерполяции выражения в HTML, это необязательно, когда мы уже находимся в месте, где Angular ожидает выражение.

Вы должны изменить его

<div id="display-wrapper" ng-show='selection.text'> 

Вы говорите, что первая модель все еще работает на JSFiddle. Не знаю, почему. Может быть, другая версия Angular? В любом случае второй шаблон должен работать для всех ситуаций.

+0

Я не уверен, почему у меня был успех jsfiddle, возможно, поскольку я включил значения в переменные $ scope? Я не обеспокоен тем, что ваше объяснение имеет смысл и решило мою проблему, спасибо. – Niccolo

Смежные вопросы