Допустим , у вас есть массив , который визуализируется в ul
с li
для каждого элемента и свойства на контроллере называется selectedIndex
. Как лучше всего добавить класс li
с индексом selectedIndex
в AngularJS?
В настоящее время я дублирую (вручную) li
код и добавляю класс к одному из li
тегов, а также использую ng-show
и, ng-hide
чтобы показать только один li
индекс.
Ответы:
Если вы не хотите помещать имена классов CSS в Controller, как я, вот старая уловка, которую я использую с дней до v1. Мы можем написать выражение, которое оценивает непосредственно выбранное имя класса , никаких пользовательских директив не требуется:
Обратите внимание на старый синтаксис с двоеточием.
Существует также новый лучший способ условного применения классов, например:
Angular теперь поддерживает выражения, которые возвращают объект. Каждое свойство (имя) этого объекта теперь рассматривается как имя класса и применяется в зависимости от его значения.
Однако эти пути функционально не равны. Вот пример:
Поэтому мы могли бы повторно использовать существующие классы CSS, в основном сопоставляя свойство модели с именем класса и в то же время не допуская CSS-классов в коде контроллера.
источник
($index==selectedIndex) ? 'selected' : ''
?{classname: '$index === selectedIndex'}
и он не работал. Когда я собрал все вместе и использовал == вместо ===, это сработало.{classname: '$index==selectedIndex'}
ng-класс поддерживает выражение, которое должно вычислять либо
Итак, используя форму 3) мы можем просто написать
Смотрите также Как я могу условно применять стили CSS в AngularJS? для более широкого ответа.
Обновление : в Angular 1.1.5 добавлена поддержка троичного оператора , поэтому, если эта конструкция вам более знакома:
источник
ng-class="{'selected': $index==selectedIndex}"
у меня работаетМой любимый метод - использование троичного выражения.
Примечание: если вы используете более старую версию Angular, вы должны использовать это вместо этого,
источник
ng-class="property.name=='timestamp' ? 'property-timestamp' : 'property-'+{{$index}}"
. Не смог придумать другого пути.Я добавлю к этому, потому что некоторые из этих ответов кажутся устаревшими. Вот как я это делаю:
Где 'isSelected' - это переменная javascript, определенная в контроллере угловых значений.
Чтобы более конкретно ответить на ваш вопрос, вот как вы можете создать список с этим:
HTML
JS
Смотрите: http://jsfiddle.net/tTfWM/
Смотрите: http://docs.angularjs.org/api/ng.directive:ngClass
источник
ng-class:className
против просто использованияclass="{{className}}"
?Вот гораздо более простое решение:
источник
Недавно я столкнулся с подобной проблемой и решил просто создать условный фильтр:
Он принимает один аргумент, который является либо 2-элементным массивом, либо строкой, которая превращается в массив, к которому добавляется пустая строка в качестве второго элемента:
источник
filter('yesNo', function() { return function(input) { // info('yesNo('+ input +')'); switch(input){ case '1': return ' yes '; break; default: return ' no '; break; } } });
Если вы хотите выйти за рамки двоичной оценки и не использовать свой CSS в контроллере, вы можете реализовать простой фильтр, который оценивает входные данные по отношению к объекту карты:
Это позволяет вам написать вашу разметку следующим образом:
источник
То, что я недавно сделал, делало это:
isShowing
Значение представляет собой значение , которое находится на моем контроллере , который получает переключаемый с щелчком кнопки и части между одинарными скобками классами я создал в моем файле CSS.РЕДАКТИРОВАТЬ: Я также хотел бы добавить, что у Codechool.com есть бесплатный курс, который спонсируется Google на AngularJS, который охватывает все эти вещи, а затем некоторые. Вам не нужно ничего платить, просто зарегистрируйтесь и начинайте! Желаем удачи всем вам!
источник
isShowing
ли массив в контроллере?Тернарный оператор был добавлен в угловой парсер в 1.1.5 .
Итак, самый простой способ сделать это сейчас:
источник
class="otherClass ng-class:($index==selectedIndex)? 'selected' : '';"
.Мы можем сделать функцию для управления возвращаемым классом с условием
А потом
Вы можете обратиться к полной кодовой странице в ng-классе, если пример
источник
Я новичок в Angular, но нашел это, чтобы решить мою проблему:
Это будет условно применять класс, основанный на var. Он начинается с загрузки значков по умолчанию, с использованием ng-класса, я проверяю статус
showDetails
iftrue/false
и применяю class icon-upload . Работает отлично.Надеюсь, поможет.
источник
Это работает как шарм;)
источник
Это, вероятно, будет забыто, но вот как я использовал тернарные операторы 1.1.5 для переключения классов в зависимости от того, является ли строка в таблице первой, средней или последней - за исключением того, что в таблице есть только одна строка:
источник
Это в моей работе несколько условно судить:
источник
Вот еще один вариант, который хорошо работает, когда нельзя использовать ng-класс (например, при стилизации SVG):
(Я думаю, что вы должны быть на последнем нестабильном Angular, чтобы использовать ng-attr-, я сейчас на 1.1.4)
источник
ну, я бы посоветовал вам проверить состояние вашего контроллера с помощью функции, возвращающей true или false .
и в вашем контроллере проверьте состояние
источник
частичный
контроллер
источник
Если вы используете angular pre v1.1.5 (т.е. без тернарного оператора) и вам все еще нужен эквивалентный способ установки значения в обоих условиях, вы можете сделать что-то вроде этого:
источник
Если у вас есть общий класс, который применяется ко многим элементам, вы можете создать собственную директиву, которая добавит этот класс, например, ng-show / ng-hide.
Эта директива добавит класс «активный» к кнопке, если она нажата
Больше информации
источник
Просто добавив что-то, что сработало для меня сегодня, после долгих поисков ...
Надеюсь, что это помогает в вашем успешном развитии.
знак равно
Синтаксис недокументированного выражения: отличная ссылка на сайт ... =)
источник
Проверьте это .
Печально известное
if|else
заявление AngularJS !!!Когда я начал использовать Angularjs, я был немного удивлен, что не смог найти оператор if / else.
Поэтому я работал над проектом и заметил, что при использовании оператора if / else условие отображается при загрузке. Вы можете использовать нг-плащ, чтобы исправить это.
.ng-cloak { display: none }
Спасибо амаду
источник
Вы можете использовать этот пакет npm. Он обрабатывает все и имеет опции для статических и условных классов на основе переменной или функции.
источник