Vueはツリーテーブルを実装する

Vueはツリーテーブルを実装する

この記事では、ツリーテーブルを実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。

効果は以下のとおりです。

中央の画像:

コードは次のとおりです。

<テンプレート>
  <div class="treeTable">
    <テーブル>
      <tr>
        <th>デバイスタイプ</th>
        <th>製品名</th>
        <th>バージョン</th>
        <th>チェック項目</th>
        <th>サブ項目を確認する</th>
        <th>主要カテゴリを確認する</th>
        <th>機器サブカテゴリ</th>
        <th>備考</th>
      </tr>
      <t本文>
        <tr v-for="(item,index) データ内" :key="index" v-show="item.display">
          <td :style="{paddingLeft:item.left}"><span @click="nodeClick(index)" v-if="item.branch" :class="item.expand? 'expand':'collapse'"></span>{{item.type}}</td>
          <td>{{アイテム名}}</td>
          <td>{{item.version}}</td>
          <td>{{item.checkItem}}</td>
          <td>{{item.checkSubItem}}</td>
          <td v-if="item.branch">{{item.BigItem}}</td>
          <td v-else><input type="text" v-model="item.BigItem"></td>
          <td v-if="item.branch">{{item.smallItem}}</td>
          <td v-else><input type="text" v-model="item.smallItem"></td>
          <td v-if="item.branch">{{item.remark}}</td>
          <td v-else><input type="text" v-model="item.remark"></td>
        </tr>
      </tbody>
    </テーブル>
  </div>
</テンプレート>

<スクリプト>
/* eslint を無効にする */ 
エクスポートデフォルト{
  名前: 'treeTable',
  データ () {
    戻る {
      メッセージ: 'Vue.js アプリへようこそ',
      データ:[
          {left:'0'、branch:true、expand:true、display:true、id:'1'、pid:'0'、type:'Firewall'、name:'',version:'',checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'0.5rem'、branch:true、expand:true、display:true、id:'1_1'、pid:'1'、type:'Firewall'、name:'CE001'、version:'',checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'1rem'、branch:true、expand:true、display:true、id:'1_1_1'、pid:'1_1'、type:'Firewall'、name:'CE001'、version:'VR001'、checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'1.5rem'、branch:true、expand:true、display:true、id:'1_1_1_1'、pid:'1_1_1'、type:'ファイアウォール'、name:'CE001'、version:'VR001'、checkItem:'チェック項目 A'、checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'3rem'、branch:false、expand:true、display:true、id:'1_1_1_1_1'、pid:'1_1_1_1'、type:'ファイアウォール'、name:'CE001'、version:'VR001'、checkItem:'チェック項目 A'、checkSubItem:'チェックサブ項目 A'、BigItem:'ソフトウェアバージョン'、smallItem:'チェック項目 A'、remark:'備考情報'}、
          {left:'0'、branch:true、expand:true、display:true、id:'2'、pid:'0'、type:'データ交換センター'、name:'',version:'',checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'0.5rem',branch:true,expand:true,display:true,id:'2_1',pid:'2',type:'データ交換センター',name:'CE001',version:'',checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'1rem'、branch:true、expand:true、display:true、id:'2_1_1'、pid:'2_1'、type:'データ交換センター'、name:'CE001'、version:'VR001'、checkItem:'',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'1.5rem',branch:true,expand:true,display:true,id:'2_1_1_1',pid:'2_1_1',type:'データ交換センター',name:'CE001',version:'VR001',checkItem:'チェック項目A',checkSubItem:'',BigItem:'',smallItem:'',remark:''},
          {left:'3rem',branch:false,expand:true,display:true,id:'2_1_1_1_1',pid:'2_1_1_1',type:'データ交換センター',name:'CE001',version:'VR001',checkItem:'チェック項目A',checkSubItem:'チェックサブ項目A',BigItem:'ソフトウェアバージョン',smallItem:'チェック項目A',remark:'備考情報'},
        ]、
    }
  },
  方法:{
    ノードクリック(インデックス){
      this.datas[index].expand = this.datas[index].expand ? false : true
      pid = this.datas[index].idとします。 
      if (this.datas[index].expand) {
        for(let i = index +1;i<this.datas.length;i++){
          reg = new RegExp('^'+pid) とします。
          if (this.datas[i].pid == pid) {
            this.datas[i].display = true
            this.datas[i].expand = false 
          }そうでない場合、reg.test(this.datas[i].id)){
            this.datas[i].display = false
            this.datas[i].expand = false
          }それ以外{
            壊す
          }
        }
      }それ以外{
        for(let i = index +1;i<this.datas.length;i++){
          reg = new RegExp('^'+pid) とします。
          if(reg.test(this.datas[i].id)){
            this.datas[i].display = false
            this.datas[i].expand = false 
          }それ以外{
            壊す
          }
        }
      }
      // for(let i = index +1;i<this.datas.length;i++){
      // reg = new RegExp('^'+pid) とします
      // if(reg.test(this.datas[i].id)){
      // if(this.datas[index].expand){
      // this.datas[i].display = true
      // }それ以外{
      // this.datas[i].display = false
      // this.datas[i].expand = false 
      // }
      // }
      // }
    }
  }
}
</スクリプト>
<!-- CSS をこのコンポーネントのみに制限するために "scoped" 属性を追加します -->
<スタイルスコープ>
th、td{
  幅: 150ピクセル;
}
td:最初の子{
  テキスト配置: 左;
}
td スパン{
  表示: インラインブロック;
  幅: 1.5rem;
  高さ: 1rem;
}
td span.expand{
  背景画像: url('./folder_open.png');
}
td span.collapse{
  背景画像: url('./folder.png');
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+element UI でツリーテーブルを実現
  • vue-cli+element-ui ツリーテーブル(多階層テーブル トス小計)の詳しい説明
  • vue+element UI を使用してチェックボックス付きのツリーテーブルを実装するためのサンプルコード
  • Vue ベースのドラッグ可能なツリーテーブルの例の詳細な説明

<<:  Linux インデックスノード inode の詳細な説明

>>:  MySQL データベースのスケジュールされたバックアップ スクリプトの共有

推薦する

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

Linux で rsync を使用する方法

目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...

mysql: [エラー] 不明なオプション '--skip-grant-tables'

MySQL データベースがエラー 1045 (28000): ユーザー 'ODBC'...

Docker イメージのダウンロードが遅すぎる場合の解決策

Docker イメージのダウンロードが停止したり、遅すぎたりするネットでいろいろな方法を検索しました...

ドロップダウンメニューを実装するためのネイティブ js

ドロップダウン メニューも実生活では非常に一般的です。実装に使用される js コードは、タブ選択やア...

React サーバーサイドレンダリング原則の分析と実践

ほとんどの人は、サーバーサイド レンダリング (SSR と呼んでいます) の概念について聞いたことが...

Harborを使用してプライベートDockerリポジトリを構築する方法

目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

2012年のベストWebデザイン作品レビュー[パート1]

新年の初めに、友人の健康と2013年が素晴らしい年となることを心からお祈りいたします。この記事では、...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

Webpack3+React16コード分割の実装

プロジェクトの背景最近、webpackのバージョンが古いプロジェクトがあります。 リーダー層では今の...

Mysql InnoDBとMyISAMの違いの分析

MySQL は、myisam、innodb、memory、archive、example など、多く...

React の 10 個のフックの紹介

目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...

iframeを指すaタグのターゲットの名前とIDの違い

コードをコピーコードは次のとおりです。 <iframe id="myFrameId&...

IDEA 構成の Tomcat 起動エラーの問題を解決する

異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....