Как я могу условно добавить атрибут элемента, например checked
, флажок?
Предыдущие версии Angular были, NgAttr
и я думаю, NgChecked
что все они обеспечивают функциональность, которая мне нужна. Однако эти атрибуты, по-видимому, не существуют в Angular 2, и я не вижу другого способа обеспечить эту функциональность.
javascript
angular
Джонатан Майлз
источник
источник
Ответы:
null
удаляет это:или
Подсказка:
Атрибут против свойства
Когда элемент HTML, в который вы добавляете эту привязку, не имеет свойства с именем, используемым в привязке (
checked
в данном случае), а также не применяет угловой компонент или директиву к тому же элементу, который имеет@Input() checked;
, тогда[xxx]="..."
не может использоваться.Смотрите также В чем разница между свойствами и атрибутами в HTML?
С чем связываться, когда такого свойства нет
Альтернативы
[style.xxx]="..."
,[attr.xxx]="..."
, в[class.xxx]="..."
зависимости от того, что вы пытаетесь достичь.Потому что
<input>
имеет толькоchecked
атрибут, но никакоеchecked
свойство не[attr.checked]="..."
является правильным способом для этого конкретного случая.Атрибуты могут обрабатывать только строковые значения
Общая ошибка также в том, что для
[attr.xxx]="..."
привязок значение (...
) всегда строковое. Только свойства и@Input()
s могут получать другие типы значений, такие как логическое, число, объект, ...Большинство свойств и атрибутов элементов связаны и имеют одинаковые имена.
Свойство-связь атрибута
При привязке к атрибуту свойство также получает только строковое значение из атрибута.
При связывании со свойством свойство получает привязанное к нему значение (логическое значение, число, объект, ...), а атрибут снова получает строковое значение.
Два случая, когда имена атрибутов и свойств не совпадают.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement/htmlFor (см. первое предложение описания
htmlFor property reflects the value of the for
-for
вероятно, не сработало, потому что это ключевое слово в C или JavaScript)Почему colspan не является известным нативным атрибутом в Angular 2?
С тех пор Angular был изменен и знает об этих особых случаях и обрабатывает их, так что вы можете связываться с ними,
<label [for]="
даже если такого свойства не существует (то же самое дляcolspan
)источник
attr.
. Но если вы хотите добавить пользовательский атрибут, вам определенно нуженattr.
префиксattr.
часть этого. Я пытался установить его[href]
и хотел, чтобы он был установлен только при наличииhref
свойства элемента . Без[attr.href]
этого добавился бы href со значением 'null', который при нажатии обновил бы текущую страницу.[attr.href]
починил это.href
для элемента, который имеетhref
свойство, нет необходимости использоватьattr
. Там должно быть что-то еще пошло не так.<a [href]="item.href">
где значениеitem.href
undefined (не значение undefined, но свойствоhref
не существуетitem
) устанавливалоhref
атрибут вnull
. Я не углублялся в источник, потому что, честно говоря, меня это не сильно волнует (это крошечная деталь), ноattr.
это совершенно иная директива, и поэтому его поведение не удивляет меня.в атрибуте angular-2 синтаксис
Привязывает роль атрибута к результату выражения myAriaRole.
так можно использовать как
источник
your expression
естьfalse
атрибут в DOM будет выглядеть<div checked="false">
. Я не думаю, что это намеченный эффект.attr.
. Но если вы хотите добавить пользовательский атрибут, вам определенно нуженattr.
префиксУточняющий ответ Гюнтера Цохбауэра:
Похоже, сейчас все по-другому. Я пытался сделать это, чтобы условно применить атрибут href к тегу привязки. Вы должны использовать undefined для случая «не применять». В качестве примера я продемонстрирую со ссылкой, условно применяя атрибут href.
Якорный тег без атрибута href становится простым текстом, указывающим местозаполнитель для ссылки, согласно спецификации гиперссылки .
Для моей навигации у меня есть список ссылок, но одна из этих ссылок представляет текущую страницу. Я не хотел, чтобы ссылка на текущую страницу была ссылкой, но все же хочу, чтобы она появилась в списке (у нее есть несколько пользовательских стилей, но этот пример упрощен).
Думаю, это чище, чем использование двух * ngIf для тега span и anchor.
источник
Если это элемент ввода, вы можете написать что-то вроде ....
<input type="radio" [checked]="condition">
Значение условия должно быть истинным или ложным.Также для атрибутов стиля ...
<h4 [style.color]="'red'">Some text</h4>
источник
Вы можете использовать это.
<span [attr.checked]="val? true : false"> </span>
источник
Вы можете использовать лучший подход для тех, кто пишет HTML для уже существующих scss.
HTML
СКС
Таким образом, вам не нужно
<boolean> ? true : null
каждый раз.источник
multiple
атрибутомselect
элемента.Здесь, абзац печатается только 'isValid' является истинным / он содержит любое значение
источник
Я хотел иметь всплывающую подсказку только для определенного поля, как добавлено ниже в коде, но вы хотите иметь всплывающую подсказку для мультиплета, вы можете иметь массив valdidate, используя:
Несколько элементов, имеющих собственный атрибут data-tooltip :
1: [ 'key1ToHaveTooltip', `key2ToHaveTooltip ']. Включает в себя (ключ)
2: ['key1ToHaveTooltip', 'key2ToHaveTooltip']. IndexOf (key)> -1
иметь атрибут всплывающей подсказки на более чем 1 элементе.
источник
Inline-Maps тоже удобны.
Они немного более четкие и читабельные.
Просто еще один способ выполнить то же самое, если вам не нравится троичный синтаксис или
ngIf
s (и т. Д.).источник
checked
атрибутом (добавить / удалить его из входного тега)<input type="checkbox" name="vehicle" value="Car" checked>
? (если мы изменимclass
наcheckbox
ваш код, он НЕ работает (я проверяю это))