Vue ElementUI は非同期読み込みツリーを実装します

Vue ElementUI は非同期読み込みツリーを実装します

この記事の例では、vue ElementUI の非同期読み込みツリーを実装するための具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

ルーティングファイルの変更

'@/components/list.vue' からリストをインポートします。
'@/components/add.vue' から Add をインポートします。
'@/components/tree.vue' から Tree をインポートします。
'@/components/asyntree.vue' から AsynTree をインポートします。

エクスポートデフォルト{
    ルート:[
        {パス:"/list",コンポーネント:リスト},
        {パス:"/add",コンポーネント:追加},
        {パス:"/add/:id",コンポーネント:追加},
        {パス:"/tree",コンポーネント:Tree},
        {パス:"/asyntree",コンポーネント:AsynTree}
    ]

}

ホームページ app.vue

<テンプレート>
  <div id="アプリ">
    <router-link to="/add">追加</router-link>&nbsp;&nbsp;
    <router-link to="/list">リスト</router-link>&nbsp;&nbsp;
    <router-link to="/tree">ツリー構造</router-link>&nbsp;&nbsp;
    <router-link to="/asyntree">非同期ツリー構造</router-link>&nbsp;&nbsp;
    <ルータービュー></ルータービュー>
  </div>
</テンプレート>

<スクリプト>
'./components/list.vue' からリストをインポートします。

エクスポートデフォルト{
  名前: 'アプリ',
  コンポーネント:
    リスト
  }
}
</スクリプト>

<スタイル>
#アプリ {
  フォントファミリ: 'Avenir'、Helvetica、Arial、sans-serif;
  -webkit-font-smoothing: アンチエイリアス;
  -moz-osx-font-smoothing: グレースケール;
  テキスト配置: 中央;
  色: #2c3e50;
  上マージン: 60px;
}
</スタイル>

ツリーページを非同期にロードする

<テンプレート>


<el-コンテナ>
  <el-aside width="200px">
    <el-tree ref="ツリー"
    :data="データ"
    怠け者
    チェックボックスを表示
    ノードキー="id"
    厳密にチェックする
    :load="ロードノード"
    :props="デフォルトプロパティ"
    @node-click="ノードクリック">
    </el-tree>
  </el-aside>
  <メイン>

    <el-form :model="typeinfo" class="demo-form-inline">
    <el-form-item ラベル="ID">
        <el-input v-model="typeinfo.id" 読み取り専用></el-input>
    </el-form-item>
    <el-form-item label="カテゴリ名">
        <el-input v-model="typeinfo.label" placeholder="カテゴリ名"></el-input>
    </el-form-item>
    <el-form-item label="シリアル番号">
        <el-input v-model="typeinfo.seqno" placeholder="シリアル番号"></el-input>
    </el-form-item>
   <el-form-item label="親ID">
        <el-input v-model="typeinfo.pid" 読み取り専用></el-input>
    </el-form-item>
    <el-form-item>
        <el-button type="primary" @click="dosave">保存</el-button>
        <el-button type="primary" @click="dochildsave">ノードを追加</el-button>
    </el-form-item>
    </el-form>

  </el-main>
</el-コンテナ>

</テンプレート>

<スクリプト>
'axios' から axios をインポートします

エクスポートデフォルト{
    データ() {
        戻る {
            data:[], //ツリーオブジェクトのデータモデル defaultProps: { //ツリーオブジェクトのプロパティの対応 children: 'children',
                ラベル: 'ラベル'
            },
            typeinfo:{//製品分類エンティティオブジェクトID:''、
                pid:''、
                ラベル: ''、
                シーケンス番号: ''
            }
        }
    },
    メソッド: {
        ロードノード(ノード、解決){
            //第 1 レベルのノードを展開する場合、バックグラウンドから第 1 レベルのノード リストをロードします if (node.level==0)
            {
                this.loadfirstnode(解決)。
            }
            //他のレベルのノードを展開する場合、次のレベルのノードリストをバックグラウンドから動的に読み込みます if (node.level>=1)
            {
                this.loadchildnode(ノード、解決);
            }
        },
        //第1レベルのノードをロードする loadfirstnode(resolve){
            axios.get('http://localhost:6060/loadtype')
                .then(関数(応答){
                    (応答データ)を解決します。
                })
        },
        //ツリーコンポーネントを更新する refreshtree(){
            var _this = これ;
            axios.get('http://localhost:6060/loadtype')
                .then(関数(応答){
                    _this.data = 応答データ;
                })
        },
        //ノードの子ノードコレクションをロードする loadchildnode(node,resolve){
            axios.get('http://localhost:6060/loadtypechild?pid='+node.data.id)
                .then(関数(応答){
                    (応答データ)を解決します。
                })
        },
        //ノード上でトリガーされたイベントをクリックし、3 つのパラメータを渡し、データ オブジェクトは最初のパラメータ nodeclick(data,dataObj,self) を使用します。
        {
            //アラート(data.label+",id="+data.id);
            this.typeinfo.id=データID;
            this.typeinfo.pid=データ.pid;
            this.typeinfo.label=データラベル;
            this.typeinfo.seqno=データ.seqno;
        },
        //分類方法を保存する dosave()
        {
            var _this = これ;
             axios.post('http://localhost:6060/savetype',this.typeinfo)
                .then(関数(応答){
                    if(resp.data)
                        _this.refreshtree();
                })
        },
        //サブ分類メソッドdochildsave()を保存する
        {
            // 左のツリーコンポーネントでノードが選択されているかどうかを判断します。var cnt=this.$refs['tree'].getCheckedNodes().length;
            (カウント!= 1)の場合
            {
                this.$message('一意の親ノードを選択する必要があります');
                戻る;
            }
            // this.$refs['tree'] を通じてツリー オブジェクトを取得します。ここで、tree はツリー コンポーネントの ref 属性です。var dataObj = this.$refs['tree'].getCheckedNodes()[0];
    
            this.typeinfo.id='';
            this.typeinfo.pid=データオブジェクトID;
            var _this = これ;
            axios.post('http://localhost:6060/savetype',this.typeinfo)
                .then(関数(応答){
                    if(resp.data)
                        _this.refreshtree();
                })
        }
    }

}
</スクリプト>

バックグラウンド コントローラー

@RequestMapping("/loadtype")
 @レスポンス本文
 パブリック リスト<TypeInfo> getTypeJson()
 {
  リスト<TypeInfo> rtn = getFirstNode();
  
  戻り値 rtn;
 }
  
 @RequestMapping("/loadtypechild")
 @レスポンス本文
 パブリック リスト<TypeInfo> getTypeByPid(Integer pid)
 {
  System.out.println("pid==="+pid);
  リスト<TypeInfo> rtn = addsrv.getTypeList(pid);
  
  戻り値 rtn;
 }
 
 プライベート List<TypeInfo> getFirstNode()
 {
  タイプ情報ルート = addsrv.getRootType();
  リスト<TypeInfo> firstList = addsrv.getTypeList(root.getId());
  for(TypeInfo ti:firstList)
   ti を再帰的に実行します。
  firstList を返します。
 }
 
 プライベート void recurseNode(TypeInfo ti)
 {
  リスト<TypeInfo> children = addsrv.getTypeList(ti.getId());
  System.out.println("ti.id"+ti.getId()+",children="+children);
  (children == null || children.size() == 0)の場合
   戻る;
  ti.setChildren(子供);
  for(TypeInfo chd:children)
  {
   再帰ノード(chd);
  }
 }
 
 @RequestMapping("/savetype")
 @レスポンス本文
 パブリックブール savetype(@RequestBody TypeInfo ti)
 {
  試す {
   整数 id = ti.getId();
   if(id != null)
    rv.updateType(ti) を追加します。
   それ以外 {
    rv.saveType(ti)を追加します。
   }
   true を返します。
  } キャッチ (例外 e) {
   false を返します。
  }
  
 }

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

以下もご興味があるかもしれません:
  • Vue ダイナミックルーティングがインポートコンポーネントを非同期にロードし、モジュールをロードできない問題を解決します
  • vue-routerのインポート時にモジュールを非同期にロードする問題の解決策の詳細な説明
  • Vue+echartsは、動的にチャートを描画し、非同期にデータをロードする方法を実現します。
  • Vue awesome swiper 非同期読み込みデータバグ
  • VueによるAmapの非同期読み込みの実装
  • 非同期読み込みのためのVue+webpackの使用例3つを詳しく解説
  • Vueはaboutコンポーネントを非同期にロードします
  • Vue-Cliで非同期にデータをロードする際に注意すべき点の詳細な説明
  • Javascript vue.js テーブルページング、Ajax データの非同期読み込み
  • Vue.js テーブル ページング Ajax データの非同期読み込み

<<:  MySQL InnoDBエンジンのインデックスとストレージ構造の詳細な説明

>>:  Windows オペレーティング システムでの Linux 仮想マシンのインストールと構成のチュートリアル

推薦する

CSS スタッキングと Z インデックスのサンプルコード

カスケードとカスケードレベルHTML 要素は 3 次元の概念です。水平方向と垂直方向に加えて、「Z ...

JavaScript 以外の静的リソースのバンドルの詳細

目次1. パッケージングツールでのカスタムインポート2. ブラウザとバンドラの共通インポート構文3....

Reactでのこのリファレンスの詳細な説明

目次原因:以下を実行します: 1. コンストラクター2.レンダリング機能3.bind関数とarrow...

Vue でシンプルな無限ループスクロールアニメーションを実装する例

この記事では主に、Vue でシンプルな無限ループスクロールアニメーションを実装し、みんなで共有する例...

CSSはスクロールを許可しながらスクロールバーを非表示にするためにオーバーフローを設定します

CSS は、スクロールを許可しながらスクロール バーを非表示にするために Overflow を設定し...

TypeScript インターフェースの紹介

目次1. インターフェース定義2. 属性2.1 オプション属性2.2 読み取り専用プロパティ3. ク...

MYSQLデータベースの最適化段階を簡単に理解する

導入面接官がこんな質問をしたことはありませんか?データベースをどのように最適化しますか?では、この質...

実用的な情報が満載のJavaScript Webフォーム機能通信

1. はじめに先ほど、フロントエンドの表示の問題について説明しました。では、前のコンテンツに戻って、...

Ansibleを使用してディレクトリ内のすべてのコンテンツを削除する方法

Ansible を使用する学生は、以下に示すように、Ansible が特定のフォルダーまたはファイル...

CSS3 のボックス サイズ設定 (コンテンツ ボックスとボーダー ボックス) の詳細な説明

CSS3 のボックス サイズ設定 (content-box と border-box) CSS3 の...

MySQLクライアント認証後の接続失敗の問題に対する完璧なソリューション

MySQL 環境をローカル (192.168.1.152) にデプロイし、リモート クライアント 1...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...

Linux bash: ./xxx: バイナリ ファイルを実行できません エラー

今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...

JavaScriptオブジェクト指向について学ぼう

目次JavaScript プロトタイプチェーンオブジェクトプロトタイプトップレベルのプロトタイプOb...

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装0. 背景実際の開発環境では、フロントエン...