[解決済み] Angular 2でcolspanが既知のネイティブ属性でないのはなぜですか?
質問
このようなコードを試すと
<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 の属性ではないのでしょうか。また、もしそれがない場合、ブラウザは HTML ではなく DOM をレンダリングするので、ブラウザはどのようにしてテーブルをレンダリングできるのでしょうか?
また、Chromeインスペクタを開き、プロパティタブに移動すると、なぜ要素のプロパティとしてcolspanを見ることができるのでしょうか?
なぜ DOM はこのような矛盾を示すのでしょうか。
どうすれば解決するのか?
**類似の例
<label for=...>
プロパティと属性は常に1:1であるとは限りません。よく遭遇する例として、labelタグの
<label for="someId">
Angularでは
<label [for]="someId">
は同じエラーで失敗するので、次のようにバインドする必要があります。
<label attr.for="{{someId}}">
または
<label [attr.for]="someId">
しかし
<label [htmlFor]="someId">
も動作します。
htmlFor
が DOM に反映されるプロパティだからです。
for
属性に反映されます。
参照
https://developer.mozilla.org/de/docs/Web/API/HTMLLabelElement
については
htmlFor
プロパティを指定します (
Properties
セクション)
参照 attributeとpropertyの違いは何ですか?
colSpan
実際のプロパティ名
によると
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement
colSpan
に反映されるプロパティは
colspan
属性に反映されるため、(大文字の
S
)
<td [colSpan]="1 + 1">Column</td>
参照 https://plnkr.co/edit/BZelYOraELdprw5GMKPr?p=preview
はうまく機能します。
なぜAngularはデフォルトでプロパティにバインドするのですか?
Angularはパフォーマンス上の理由から、デフォルトでプロパティにバインドします。属性へのバインドはコストがかかります。属性はDOMに反映され、DOMの変更は変更後に一致するかもしれないCSSスタイルの再評価を引き起こすことがありますが、プロパティは変更されたJavaScriptオブジェクトの値に過ぎないからです。
とは
attr.
では、高価な動作を明示的に選択することになります。
関連
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] HTMLの "no-js "クラスは何のためにあるのですか?
-
[解決済み] JSON.stringifyでErrorを文字列化することはできないのでしょうか?
-
[解決済み】Angularの例外。ngForIn'は既知のネイティブプロパティではないため、バインドできない
-
[解決済み】addEventListenerのuseCaptureパラメータが理解できない。
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 2で条件属性を追加する方法は?
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?