この単純なVueJS2.xコンポーネントがネストされたHTMLテーブル要素から引き上げられるのはなぜですか?

ウォルトストーンバーナー

VueJS2.6.12の開発バージョンを使用しています。

私のHTMLには、次のようなVueJSテンプレートがあります(小さな例のために削除しました)。

<div>
  <table class="table">
    <thead>
      <tr><th>AAA</th><th>BBB</th></tr>
    </thead>

    <tbody id="main">
       <my-item v-for="item in dataset" :d="item" :key="item.key"/>       <!-- (this part works) -->
    </tbody>
  </table>
</div>

私のJavaScriptでは、次のようにグローバルVueコンポーネントを定義しました(これは機能し、データを表示します)。

Vue.component('my-item', {
  props: ["d"],
  template: `<tr><td>{{this.d.AAA}}</td><td>{{this.d.BBB}}</td></tr>`
});

ページをロードすると、データが正しくレンダリングされているのがわかりますが、テーブルヘッダーは下部にあります。trけれども(私のデータを含む)の要素は、存在しているtable

ブラウザインスペクタでDOMを表示すると、VueJSがこの構造を構築し、要素を外部にtbody、さらにはtableそれ自体を持ち上げていることがわかります。

<div>
  <tr><td>aaa</td><td>bbb</td></tr>               <!-- Why are these two rows outside the table? -->
  <tr><td>yyy</td><td>zzz</td></tr>
  <table class="table">
    <thead>
      <tr><th>AAA</th><th>BBB</th></tr>
    </thead>
    <tbody id="main"></tbody>
  </table>
</div>

なぜこれが発生し、どうすれば修正できますか?<tr> ... </ tr>要素tbodytheadヘッダー行の下にある内に挿入されることを期待しています。


少し奇妙なことに、上下にいくつかの行を手動で追加すると、次のようになります。

    <tbody id="main">
       <tr><td>111</td><td>222</td></tr>
       <my-item v-for="item in dataset" :d="item" :key="item.key"/>
       <tr><td>888</td><td>999</td></tr>
    </tbody>

それら保存されます:

<div>
  <tr><td>aaa</td><td>bbb</td></tr>         <!-- ...but these still got hoisted out if the table -->
  <tr><td>yyy</td><td>zzz</td></tr>
  <table class="table">
    <thead>
      <tr><th>AAA</th><th>BBB</th></tr>
    </thead>
    <tbody id="main">
      <tr><td>111</td><td>222</td></tr>
      <tr><td>888</td><td>999</td></tr>
    </tbody>
  </table>
</div>
ウォルトストーンバーナー

うーん、少し違う形で同じ問題噛まれました。

一言で言えば、DOM解析の警告があり、のようなtable要素には、その中に表示できる要素に制限があります。(FYI: 、だけでなく、この問題を持っています)。ulolselect

解決策は、VueJSのis属性を使用することです

<div>
  <table class="table">
    <thead>
      <tr><th>AAA</th><th>BBB</th></tr>
    </thead>

    <tbody id="main">
       <!-- Specify the element, but then use  is="component-name" -->
       <tr is="my-item" v-for="item in dataset" :d="item" :key="item.key"/>
    </tbody>
  </table>
</div>

これにより、table(およびtbody)が " tr"要素を取得するため、テンプレートの解析が正常になりますが、そのコンテンツは名前付きコンポーネントによってレンダリングされます。


重要:VueJS 2(上に表示)からVueJS3への重大な変更。

VueJS 2では、VueJS3ではis="..."`v-is =" ... "になりました。

また、VueJS 2は文字列を取りましたが、VueJSはJavascript式を取ります。つまり<tr v-is="'my-item'">、引用符を使用して文字列を渡す必要があります。

https://v3.vuejs.org/guide/component-basics.html#dom-template-parsing-caveatsおよびhttps://v3.vuejs.org/guide/migration/custom-elements-interop.html#vを参照してください詳細については、-is-for-in-dom-template-parsing-workaroundsを参照してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

この単純なVueJSコンポーネントテンプレートがDOM内のテーブルの上の間違った場所にレンダリングされるのはなぜですか?

分類Dev

名前付き関数宣言をreturnステートメント内に配置すると、それが引き上げられないのはなぜですか?

分類Dev

選択したhtml要素コンポーネントから配列内の値が異なる2つのテキストコンポーネントに配列を渡すにはどうすればよいですか?

分類Dev

スタイル付きコンポーネントがReactコンポーネントで作成されたのか、別のスタイル付きコンポーネント/ネイティブタグで作成されたのかを区別する方法

分類Dev

ページの現在のタイトルを取得し、ネストされたコンポーネントから更新し、Vuejs2で更新します

分類Dev

react.jsで同じクラス名を使用しているときに、cssスタイルがコンポーネントからリーク(他のコンポーネントに継承される)するのはなぜですか?

分類Dev

ステートメントが機能しないのに、なぜこれは単純な(ネストされた)のですか?

分類Dev

Typescript:プロパティ値がネストされたオブジェクトからのものである場合、コードがコンパイルされないのはなぜですか?

分類Dev

このネストされたジェネリックキャストがコンパイラエラーを引き起こすのはなぜですか

分類Dev

ルートを変更するたびにangular2コンポーネントが再インスタンス化されるのはなぜですか?

分類Dev

単純な接続プールがこれらの単純なputステートメントを実行しないのはなぜですか?

分類Dev

割り当て可能なコンポーネントを使用したCo-Arrayが、異なるイメージからアクセスしたときにセグメンテーション違反を引き起こすのはなぜですか?

分類Dev

この警告が表示されるのはなぜですか:マウントされたコンポーネントまたはマウントされたコンポーネントのみを更新できますか?

分類Dev

pdbでネストされたブレークポイントは可能ですか?そうでない場合、何がそれらを妨げますか?

分類Dev

単純なReactコンポーネントが2回レンダリングされるのはなぜですか?

分類Dev

Angular:カラーCSSプロパティ設定がネストされたコンポーネントに伝播するのはなぜですか?

分類Dev

ブートストラップ:タブのコンテンツ領域がタブから押し下げられるのはなぜですか?

分類Dev

ブートストラップ:タブのコンテンツ領域がタブから押し下げられるのはなぜですか?

分類Dev

ネストされたJavaクラスがScalaからインポートできないのはなぜですか?

分類Dev

特定のコンポーネントのインテントを作成するとき、「これ」がコンストラクターの最初の引数にならないのはいつですか?

分類Dev

レデューサーからの初期状態が接続されたコンポーネントに渡されないのはなぜですか?

分類Dev

このネストされたループ出力が8と18から始まるのはなぜですか?

分類Dev

ユーザーがブートストラップhtmlの各コンポーネントをクリックしたときに、ブートストラップ折りたたみ可能コンポーネントからモデルにデータを送信するにはどうすればよいですか?

分類Dev

VueJS-テーブルコンポーネントを別のコンポーネントから更新するにはどうすればよいですか?

分類Dev

このネストされた可変個引数テンプレートが無効な引数であるのはなぜですか?

分類Dev

親コンポーネントが動的に追加されたときに、親コンポーネントから子コンポーネントの値にアクセスするにはどうすればよいですか?

分類Dev

Angular:親リストが置き換えられたときにネストされたコンポーネントツリーにコンポーネントの状態を保持するにはどうすればよいですか?

分類Dev

Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

分類Dev

Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

Related 関連記事

  1. 1

    この単純なVueJSコンポーネントテンプレートがDOM内のテーブルの上の間違った場所にレンダリングされるのはなぜですか?

  2. 2

    名前付き関数宣言をreturnステートメント内に配置すると、それが引き上げられないのはなぜですか?

  3. 3

    選択したhtml要素コンポーネントから配列内の値が異なる2つのテキストコンポーネントに配列を渡すにはどうすればよいですか?

  4. 4

    スタイル付きコンポーネントがReactコンポーネントで作成されたのか、別のスタイル付きコンポーネント/ネイティブタグで作成されたのかを区別する方法

  5. 5

    ページの現在のタイトルを取得し、ネストされたコンポーネントから更新し、Vuejs2で更新します

  6. 6

    react.jsで同じクラス名を使用しているときに、cssスタイルがコンポーネントからリーク(他のコンポーネントに継承される)するのはなぜですか?

  7. 7

    ステートメントが機能しないのに、なぜこれは単純な(ネストされた)のですか?

  8. 8

    Typescript:プロパティ値がネストされたオブジェクトからのものである場合、コードがコンパイルされないのはなぜですか?

  9. 9

    このネストされたジェネリックキャストがコンパイラエラーを引き起こすのはなぜですか

  10. 10

    ルートを変更するたびにangular2コンポーネントが再インスタンス化されるのはなぜですか?

  11. 11

    単純な接続プールがこれらの単純なputステートメントを実行しないのはなぜですか?

  12. 12

    割り当て可能なコンポーネントを使用したCo-Arrayが、異なるイメージからアクセスしたときにセグメンテーション違反を引き起こすのはなぜですか?

  13. 13

    この警告が表示されるのはなぜですか:マウントされたコンポーネントまたはマウントされたコンポーネントのみを更新できますか?

  14. 14

    pdbでネストされたブレークポイントは可能ですか?そうでない場合、何がそれらを妨げますか?

  15. 15

    単純なReactコンポーネントが2回レンダリングされるのはなぜですか?

  16. 16

    Angular:カラーCSSプロパティ設定がネストされたコンポーネントに伝播するのはなぜですか?

  17. 17

    ブートストラップ:タブのコンテンツ領域がタブから押し下げられるのはなぜですか?

  18. 18

    ブートストラップ:タブのコンテンツ領域がタブから押し下げられるのはなぜですか?

  19. 19

    ネストされたJavaクラスがScalaからインポートできないのはなぜですか?

  20. 20

    特定のコンポーネントのインテントを作成するとき、「これ」がコンストラクターの最初の引数にならないのはいつですか?

  21. 21

    レデューサーからの初期状態が接続されたコンポーネントに渡されないのはなぜですか?

  22. 22

    このネストされたループ出力が8と18から始まるのはなぜですか?

  23. 23

    ユーザーがブートストラップhtmlの各コンポーネントをクリックしたときに、ブートストラップ折りたたみ可能コンポーネントからモデルにデータを送信するにはどうすればよいですか?

  24. 24

    VueJS-テーブルコンポーネントを別のコンポーネントから更新するにはどうすればよいですか?

  25. 25

    このネストされた可変個引数テンプレートが無効な引数であるのはなぜですか?

  26. 26

    親コンポーネントが動的に追加されたときに、親コンポーネントから子コンポーネントの値にアクセスするにはどうすればよいですか?

  27. 27

    Angular:親リストが置き換えられたときにネストされたコンポーネントツリーにコンポーネントの状態を保持するにはどうすればよいですか?

  28. 28

    Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

  29. 29

    Angular:子コンポーネントで渡されたオブジェクトのプロパティを更新すると、親コンポーネントが更新されますが、その値は更新されません。なぜですか?

ホットタグ

アーカイブ