el-table は編集可能なテーブルのアイデアを実現します; el-table の削除は正しくありません: テーブル内の el-select ドロップダウン データ項目には値がありますが、入力ボックスの値の値は表示されません

目次

1. 問題点

2. 理由と解決策

 3. まとめ


ヒント: 面倒だと思うなら、概要だけ読んでください。

1. 問題点

el-table はテーブル編集のアイデアを実現します。

1. 編集可能なテーブルを作成するには、テーブル内の 1 つの列がドロップダウン ボックスです。実装方法は非常に簡単です。 el-table-column にドロップダウン ボックス el-select を挿入します (要素はスロットを提供します)。通常どおりに表示できます (他のコンポーネントやカスタム コンポーネントも自由に挿入できます)。正常に表示できます)

2. 追加および削除操作

   1) 追加: フォームデータ tableData はレスポンシブとして記述されており、tableData にデータをプッシュするだけです

    2) 削除: テーブル内の行をクリックすると、現在クリックされている行の elementen:scope.$index によって提供されるスロット データが取得されます。削除する場合は、tableData 内の添え字scope.$index を見つけて削除するだけです。

3. 実際、アイデアは非常に単純です。作成はほぼ完了し、テストしましたが、問題が発生するとは予想していませんでした @--@

   特定の問題: el-table に多くの行が挿入され、ドロップダウン ボックスが配置されているセルで別の値が選択されます。次に、削除操作を実行します。1 ~ 3 行のデータは問題ありませんが、4 行以上になると問題があります。行を削除するためにクリックしましたが、その行のドロップダウン ボックスで元々選択されていた値が削除されます。この行に隣接するデータは失われていますが、ドロップダウン項目には対応する値があり、スタイルも選択したスタイルです。選択したスタイルを持つドロップダウン データを再度選択しても、まだ入力できませ。 el-selectの入力ボックス、他の値を選択しても問題なく、普通に入力できます!具体的な状況を以下の図 1-1 に示します。

写真1-1 

2. 理由と解決策

1.. el-select でバインドされた値を html で表示し、el-select でバインドされた値に value があることを確認します。とんでもない、このままでは終わらない。

2. ドロップダウン ボックスは私が書いたものではなく、他の人がパッケージ化したものなので、他の人のパッケージの問題だと思い、element が提供する el-select に置き換えました。1 と 2 の操作を繰り返します。 3でも表示されましたが、ドロップダウン項目には対応する値があり、ドロップダウンボックスで選択した値は消えていますが、今度は選択したスタイルのドロップダウンデータを選択すると、入力がel-select のボックスは正常に入力できます。(確かにそのコンポーネントには問題がありますが、それはこの議論の焦点では​​ありません)

3. 私が書いた削除方法を確認します: ああ、また間違えました。配列を削除するときに、最初の配列の添字に従ってデータを検索しました。言葉にならないほど、この間違いは実際に少なくとも3回犯されています。それがこの問題の原因ではありませんが(1行しか削除していないので完全に削除できますし、複数行の削除方法は致命的です)、削除問題の原因でもあります。次回は失敗しないことを願っています。

4. devtools の Vue プラグインを使用して確認します。図 2-1 に示すように、el-input の値には実際には @****@がありません。

図 2-1

5. データの一部を削除すると、他のデータに影響が出るのはなぜですか? ドロップダウン ボックスが配置されているセルにのみ問題があるのはなぜですか 神様、もしあなたが理解できないなら、それはとんでもないことです残業時間外@—@

6. 1 時間以上落ち込んでいました。最後に、前回いくつかのデータを確認したところ、実際にはel-tableの全選択ボタンが選択されていました。el-table がどのデータがどれであるかを区別できないので、誰を削除するかは、不明瞭で混乱していると考えられます

7. 推測は正しかったので、図 2-2 に示すように、各データに一意の行キーを付ければ、問題はありません。

とんでもないことだ。行キーが必須であること、および el-table データ内の各データに対応する行キーが一意であることを確認するには、el-table を使用するのが最善です。そうしないと、さまざまなとんでもないエラーが発生する可能性があります。

図 2-2

 3. まとめ

1.編集可能なテーブルのアイデア:

   1) 編集可能なコンポーネント (ドロップダウン ボックス、入力ボックスなど) を el-table-column に挿入します (要素はスロットを提供します)。

   2) 追加および削除操作

          a. 増加: フォーム データ tableData は応答型として書き込まれ、tableData にデータをプッシュするだけです

          b. 削除: テーブルの行をクリックすると、elementen: 現在クリックされている行のscope.$indexによって提供されるスロット データを取得します; 削除する場合は、tableData内の添え字scope.$indexを直接見つけて削除します。

2. el-table の削除時に削除されなかった行が、削除された行の影響を受ける理由

    1) 削除ロジックが正しいかどうかを確認します。特にバッチで削除する場合は、削除する配列内で元の添字を探しながら削除しないでください。削除できなくなります。一時変数を使用して、削除できない項目を保存します。削除する必要がある場合は、それを tableData に割り当てるだけです。

    2)データの各行に一意の識別フィールド rowKey を追加して el-table (:row-key="rowKey") に割り当てているかどうかを確認すると、削除時に各データを判断できます。配列の添字として設定するなど、手動で設定できます (rowKey が「id」の場合、各データに element.id=elementIndex を追加します)。

3. el-table を使用する場合、行キーが必須であること、および el-table データ内の各データに対応する行キーが一意であることを確認することが最善です。そうしないと、さまざまなとんでもない問題が発生する可能性があります。エラー。

     1) テーブルの最上隅にある半選択されたスタイルは無効です。詳細については、el-table が部分的に選択されている場合、完全に選択されているスタイルが表示され、class:is-indeterminate が失われ、solution_Qinqing のスタイルが表示されます。ブログ-CSDN ブログ

      2) テーブルの行を削除すると、他の行のデータに影響します: この記事

4. 毎日穴を踏んで、穴を食べて知恵を得て、すくすくと成長してください&&**&&

/*
お役に立てば幸いです!

間違いがある場合は、修正していただければ幸いです。ありがとうございました。

*/ 

おすすめ

転載: blog.csdn.net/qq_45327886/article/details/130662119