この記事の例では、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> <router-link to="/list">リスト</router-link> <router-link to="/tree">ツリー構造</router-link> <router-link to="/asyntree">非同期ツリー構造</router-link> <ルータービュー></ルータービュー> </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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL InnoDBエンジンのインデックスとストレージ構造の詳細な説明
>>: Windows オペレーティング システムでの Linux 仮想マシンのインストールと構成のチュートリアル
序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...
一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...
B/S システム インターフェースを構築する場合、メイン ページ index.html 内に他のペー...
ホストとコンテナ間でファイルを転送するには、コンテナの完全な ID が必要です。取得方法は以下の通り...
数字で始まる次の CSS クラス名は有効になりません。 .1番目{ 色: 赤; }有効な CSS ク...
目次ルーティングプラグインをモジュール方式で使用するルートの使用宣言型ナビゲーションプログラムによる...
一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...
目次序文テーブル コンポーネントをカプセル化する必要があるのはなぜですか?ステップ1: 共通コンポー...
目次キャンバス関連文書エフェクト画像表示ケースの完全なコード親コンポーネントコードサブコンポーネント...
1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...
プログラムサービスがgitlab ci/cdと統合されたk8sを使用してデプロイされている場合、gi...
この記事の例では、画像の切り取りを実現するためのjsの具体的なコードを参考までに共有しています。具体...
HTMLの動作原理: 1. ローカル操作: ブラウザでhtmlファイルを開く2. リモートアクセス...
序文誰もが日常業務で SQL の最適化を経験したことがあると思います。したがって、最適化の前に、遅い...
目次01 GTIDの紹介02 GTIDの仕組み03 GTIDの利点と欠点04 テスト環境構築05 テ...