Почему colspan не является известным родным атрибутом в Angular 2?
если мы попытаемся код, как это:
<td [colspan]="1 + 1">Column</td>
или такой:
<td colspan="{{1 + 1}}">Column</td>
мы скоро узнаем, что "colspan
не является известным собственным атрибутом."
из документов A2 мы узнаем, что:
элемент не имеет свойства colspan. Он имеет атрибут "colspan", но интерполяция и привязка свойств могут устанавливать только свойства, а не атрибуты.
вместо этого мы должны делать это:
<td [attr.colspan]="1 + 1">Column</td>
что справедливо.
вопрос:
мой вопрос, почему colspan
не атрибут DOM, и если он отсутствует, как браузер может отображать таблицы, так как браузер отображает DOM, а не HTML?
кроме того, если я открою свой инспектор Chrome и перейду на вкладку Свойства, почему я могу видеть colspan как свойство элемента?
почему DOM демонстрирует эту непоследовательность?
2 ответа:
**подобный пример
<label for=...>
свойство и атрибут не всегда 1:1. Один из часто встречающихся примеров-это тег метка
<label for="someId">
Угловое
<label [for]="someId">
терпит неудачу с той же ошибкой, и вам нужно будет привязать как
<label attr.for="{{someId}}">
или
<label [attr.for]="someId">
но
<label [htmlFor]="someId">
также будет работать, потому что в этом случае
htmlFor
это свойство, которое отражается в DOM . Смотреть также https://developer.mozilla.org/de/docs/Web/API/HTMLLabelElement дляhtmlFor
свойство (в )см. также в чем разница между атрибутом и свойством?
colSpan
фактическое имя свойствасогласно https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement
colSpan
свойство, которое отражается в поэтому (прописныеS
)<td [colSpan]="1 + 1">Column</td>
Смотрите также https://plnkr.co/edit/BZelYOraELdprw5GMKPr?p=preview
работает просто отлично.
почему угловая привязка к свойствам по умолчанию
угловые привязки к свойству по умолчанию По соображениям производительности. Привязка к атрибуту является дорогостоящей, поскольку атрибуты отражаются в DOM, а изменение DOM может привести к переоценке стилей CSS, которые может совпадать после изменения, в то время как свойства-это просто значение в объекте JavaScript, который изменился.
Сattr.
вы явно выбираете дорогостоящее поведение.
мой вопрос в том, почему colspan не является атрибутом DOM, и если это отсутствует, как браузер может отображать таблицы, так как браузер отображает DOM, а не HTML?
Colspan является атрибутом DOM, но это не свойство, поэтому он доступен только для чтения, и браузер отображает его, потому что это атрибут.
кроме того, если я открою свой инспектор Chrome и перейду на вкладку Свойства, почему я могу видеть colspan как свойство Стихия?
хром показывает как атрибуты, так и свойства, когда вы его проверяете.
если вы считаете следующее,
<html> <head> </head> <body> <table> <tr><th>A</th><th>A</th></tr> <tr><td colspan="2" id="xyz">B</td></tr> </table> </body> </html>
document.getElementById('xyz').colspan
результатыundefined
Так как это не свойство
but document.getElementById('xyz').id
результатыxyz
Так как это свойство