この記事では主に vuejs での再帰ツリー メニュー コンポーネントの実装を紹介し、参考として提供します。
前書き
少し前に、再帰コンポーネントが最も使用されるバックエンド管理システムを構築するために vue を使用しました。 また、公式ドキュメントに不慣れなため、多くの落とし穴を踏んでしまいました。今日はみんなと共有します。
再帰コンポーネント
コンポーネントは、name オプションがある場合にのみ、テンプレート内でそれ自体を再帰的に呼び出すことができます。 公式Webサイトのこの文は、キー定義コンポーネントにはname属性が必要であるというものです。
シミュレーションデータの形式は次のとおりです:
[ { "id": "1", "menuName": "基础管理", "menuCode": "10", "children": [ { "menuName": "用户管理", "menuCode": "11" }, { "menuName": "角色管理", "menuCode": "12", "children": [ { "menuName": "管理员", "menuCode": "121" }, { "menuName": "CEO", "menuCode": "122" }, { "menuName": "CFO", "menuCode": "123" }, { "menuName": "COO", "menuCode": "124" }, { "menuName": "普通人", "menuCode": "124" } ] }, { "menuName": "权限管理", "menuCode": "13" } ] }, { "id": "2", "menuName": "商品管理", "menuCode": "" }, { "id": "3", "menuName": "订单管理", "menuCode": "30", "children": [ { "menuName": "订单列表", "menuCode": "31" }, { "menuName": "退货列表", "menuCode": "32", "children": [] } ] }, { "id": "4", "menuName": "商家管理", "menuCode": "", "children": [] } ]
html 私たちのアイデアは、ulにliを設定し、無制限のulはliを設定し、タイトルをp要素で囲むことです。
<template> <li> <span @click="toggle"> <!-- toggle:点击关闭展开 --> <i v-if="isFolder" class="icon" :class="[open ? 'folder-open' : 'folder']" @cilck="toggle"></i> <!-- <i v-if="isFolder" class="icon " :class="[open ? 'folder-open' : 'folder']"></i> --> <i v-if="!isFolder" class="icon folder-text"></i> {{model.menuName}} </span> <ul v-show="open" v-if="isFolder"> <treeMenu v-for="item in model.children" :model="item"></treeMenu> </ul> </li> </template>
公式ドキュメントに記載されている再帰コンポーネントは、 name 属性の使用
注意すべき点はい、親コンポーネントから渡されたデータは最初にディープコピーする必要があります
ディープコピー:データにpropsを割り当て、値、JSONを割り当てながらディープコピーを作成しますdata 内の .parse(JSON.stringify(この値で大丈夫です)) で、データ値は勝手に名前が付けられます
export default { name: 'treeMenu', //props: ['model'], //这样和下面效果一样 props: { model: { type: Object }, }, components: {}, }
vueの考え方に従い、Domツリーを操作せずに、2つの変数を定義します。 1 つはサブメニューの表示と非表示を切り替えるため (open)、もう 1 つはサブメニューを保存してアイコンを変更するため (isFolder) です。
data() { return { open: false, //一个显示隐藏子菜单(open) //isFolder: true //这个不要写死,运用计算属性计算看存不存在 } },
vue 計算プロパティを使用して、isFolder の値を動的に変更し、アイコンを変更し、子の有無と子の長さを決定します
computed: { isFolder() { //利用vue计算属性动态改变isFolder的值,修改图标,判断存在不子级和子级长度 // return this.model.children && this.model.children.length //和下面效果一样 let isFolder = false if (this.model.children && this.model.children.length) { isFolder = true; } else { isFolder = false; } return isFolder } },
非表示のイベントを表示します
methods: { toggle() { if (this.isFolder) { this.open = !this.open } } },
この時点で、ツリー メニューが完成しました
上記は私です。皆さんのためにまとめました。今後皆さんのお役に立てれば幸いです。
関連記事:
詳細な回答: vue の変更はコンポーネントにどのような影響を与えますか?
vueでvue-cliを使用してhelloWorldを構築する方法
以上がvuejs で再帰ツリー メニュー コンポーネントを実装する方法 (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。