element/examples/docs/fr-FR/tree.md
2019-03-01 18:35:08 +08:00

29 KiB

Tree

Affiche un ensemble de données possédant plusieurs niveaux de hiérarchie ou d'imbrication.

Usage

Voici la structure basique.

:::demo

<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>

<script>
  export default {
    data() {
      return {
        data: [{
          label: 'Niveau un 1',
          children: [{
            label: 'Niveau deux 1-1',
            children: [{
              label: 'Niveau trois 1-1-1'
            }]
          }]
        }, {
          label: 'Niveau un 2',
          children: [{
            label: 'Niveau deux 2-1',
            children: [{
              label: 'Niveau trois 2-1-1'
            }]
          }, {
            label: 'Niveau deux 2-2',
            children: [{
              label: 'Niveau trois 2-2-1'
            }]
          }]
        }, {
          label: 'Niveau un 3',
          children: [{
            label: 'Niveau deux 3-1',
            children: [{
              label: 'Niveau trois 3-1-1'
            }]
          }, {
            label: 'Niveau deux 3-2',
            children: [{
              label: 'Niveau trois 3-2-1'
            }]
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    },
    methods: {
      handleNodeClick(data) {
        console.log(data);
      }
    }
  };
</script>

:::

Sélection

Vous pouvez activer la sélection des noeuds.

:::demo cate exemple montre également comment charger des données de manière asynchrone.

<el-tree
  :props="props"
  :load="loadNode"
  lazy
  show-checkbox
  @check-change="handleCheckChange">
</el-tree>

<script>
  export default {
    data() {
      return {
        props: {
          label: 'name',
          children: 'zones'
        },
        count: 1
      };
    },
    methods: {
      handleCheckChange(data, checked, indeterminate) {
        console.log(data, checked, indeterminate);
      },
      handleNodeClick(data) {
        console.log(data);
      },
      loadNode(node, resolve) {
        if (node.level === 0) {
          return resolve([{ name: 'Root1' }, { name: 'Root2' }]);
        }
        if (node.level > 3) return resolve([]);

        var hasChild;
        if (node.data.name === 'region1') {
          hasChild = true;
        } else if (node.data.name === 'region2') {
          hasChild = false;
        } else {
          hasChild = Math.random() > 0.5;
        }

        setTimeout(() => {
          var data;
          if (hasChild) {
            data = [{
              name: 'zone' + this.count++
            }, {
              name: 'zone' + this.count++
            }];
          } else {
            data = [];
          }

          resolve(data);
        }, 500);
      }
    }
  };
</script>

:::

Noeud-feuille personnalisés en mode lazy

:::demo Les données d'un noeud ne sont pas accessibles tant que la noeud n'est pas cliqué, l'arbre ne peut donc pas prédire si un noeud sera une feuille. C'est pourquoi un bouton de menu est ajouté à chaque noeud, et si c'est une feuille il disparaîtra après le clic. Vous pouvez également dire par avance à l'arbre si un noeud est une feuille, pour éviter l'apparition du bouton de menu.

<el-tree
  :props="props1"
  :load="loadNode1"
  lazy
  show-checkbox>
</el-tree>

<script>
  export default {
    data() {
      return {
        props1: {
          label: 'name',
          children: 'zones',
          isLeaf: 'leaf'
        },
      };
    },
    methods: {
      loadNode1(node, resolve) {
        if (node.level === 0) {
          return resolve([{ name: 'region' }]);
        }
        if (node.level > 1) return resolve([]);

        setTimeout(() => {
          const data = [{
            name: 'leaf',
            leaf: true
          }, {
            name: 'zone'
          }];

          resolve(data);
        }, 500);
      }
    }
  };
</script>

:::

Checkbox désactivées

Les checkbox des noeuds peuvent être désactivées individuellement.

:::demo Dans cet exemple, la propriété disabled est ajoutée à defaultProps, et certains noeuds ont disabled:true. Les checkbox correspondantes sont donc désactivées.

<el-tree
  :data="data3"
  :props="defaultProps"
  show-checkbox
  @check-change="handleCheckChange">
</el-tree>

<script>
  export default {
    data() {
      return {
        data3: [{
          id: 1,
          label: 'Niveau un 1',
          children: [{
            id: 3,
            label: 'Niveau deux 2-1',
            children: [{
              id: 4,
              label: 'Niveau trois 3-1-1'
            }, {
              id: 5,
              label: 'Niveau trois 3-1-2',
              disabled: true
            }]
          }, {
            id: 2,
            label: 'Niveau deux 2-2',
            disabled: true,
            children: [{
              id: 6,
              label: 'Niveau trois 3-2-1'
            }, {
              id: 7,
              label: 'Niveau trois 3-2-2',
              disabled: true
            }]
          }]
        }],
        defaultProps: {
            children: 'children',
            label: 'label',
            disabled: 'disabled',
        },
      };
    }
  };
</script>

:::

Ouverture et sélection par défaut

Certains noeuds peuvent être ouverts et/ou sélectionnés par défaut.

:::demo Utilisez default-expanded-keys et default-checked-keys pour réglez respectivement les noeuds ouverts et les noeuds sélectionnés par défaut. Notez que node-key est requis dans ce cas. Sa valeurs est le nom d'une clé dans l'objets data, et sa valeur devrait être unique dans tout l'arbre.

<el-tree
  :data="data2"
  show-checkbox
  node-key="id"
  :default-expanded-keys="[2, 3]"
  :default-checked-keys="[5]"
  :props="defaultProps">
</el-tree>

<script>
  export default {
    data() {
      return {
        data2: [{
          id: 1,
          label: 'Niveau un 1',
          children: [{
            id: 4,
            label: 'Niveau deux 1-1',
            children: [{
              id: 9,
              label: 'Niveau trois 1-1-1'
            }, {
              id: 10,
              label: 'Niveau trois 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: 'Niveau un 2',
          children: [{
            id: 5,
            label: 'Niveau deux 2-1'
          }, {
            id: 6,
            label: 'Niveau deux 2-2'
          }]
        }, {
          id: 3,
          label: 'Niveau un 3',
          children: [{
            id: 7,
            label: 'Niveau deux 3-1'
          }, {
            id: 8,
            label: 'Niveau deux 3-2'
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    }
  };
</script>

:::

Sélectionner des noeuds

:::demo Cet exemple montre comment récupérer et sélectionner des noeuds. Vous pouvez utiliser deux approches: les noeuds ou les clés. Dans le cas des clés, node-key est requis.

<el-tree
  :data="data2"
  show-checkbox
  default-expand-all
  node-key="id"
  ref="tree"
  highlight-current
  :props="defaultProps">
</el-tree>

<div class="buttons">
  <el-button @click="getCheckedNodes">Récupération par noeud</el-button>
  <el-button @click="getCheckedKeys">Récupération par clé</el-button>
  <el-button @click="setCheckedNodes">Sélection par noeud</el-button>
  <el-button @click="setCheckedKeys">Sélection par clé</el-button>
  <el-button @click="resetChecked">Reset</el-button>
</div>

<script>
  export default {
    methods: {
      getCheckedNodes() {
        console.log(this.$refs.tree.getCheckedNodes());
      },
      getCheckedKeys() {
        console.log(this.$refs.tree.getCheckedKeys());
      },
      setCheckedNodes() {
        this.$refs.tree.setCheckedNodes([{
          id: 5,
          label: 'Niveau deux 2-1'
        }, {
          id: 9,
          label: 'Niveau trois 1-1-1'
        }]);
      },
      setCheckedKeys() {
        this.$refs.tree.setCheckedKeys([3]);
      },
      resetChecked() {
        this.$refs.tree.setCheckedKeys([]);
      }
    },

    data() {
      return {
        data2: [{
          id: 1,
          label: 'Niveau un 1',
          children: [{
            id: 4,
            label: 'Niveau deux 1-1',
            children: [{
              id: 9,
              label: 'Niveau trois 1-1-1'
            }, {
              id: 10,
              label: 'Niveau trois 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: 'Niveau un 2',
          children: [{
            id: 5,
            label: 'Niveau deux 2-1'
          }, {
            id: 6,
            label: 'Niveau deux 2-2'
          }]
        }, {
          id: 3,
          label: 'Niveau un 3',
          children: [{
            id: 7,
            label: 'Niveau deux 3-1'
          }, {
            id: 8,
            label: 'Niveau deux 3-2'
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    }
  };
</script>

:::

Contenu personnalisé

Le contenu des noeuds peut être personnalisé, afin de pouvoir ajouter des icônes ou des boutons par exemple.

:::demo Il existe deux méthodes de personnalisation: render-content et les slots avec portée. Utilisez render-content pour assigner une fonction de rendu qui va générer le contenu des noeuds. Voire la documentation de Vue pour plus d'informations. Si vous préférez les slots, vous aurez accès à node et data dans le scope, corerspondant à l'objet TreeNode et aux données du noeud courant. Notez que la démo de render-content ne marche pas dans jsfiddle car il ne supporte pas JSX. Dans un vrai projet, render-content marchera si les dépendances sont satisfaites.

<div class="custom-tree-container">
  <div class="block">
    <p>Avec render-content</p>
    <el-tree
      :data="data4"
      show-checkbox
      node-key="id"
      default-expand-all
      :expand-on-click-node="false"
      :render-content="renderContent">
    </el-tree>
  </div>
  <div class="block">
    <p>Avec un slot</p>
    <el-tree
      :data="data5"
      show-checkbox
      node-key="id"
      default-expand-all
      :expand-on-click-node="false">
      <span class="custom-tree-node" slot-scope="{ node, data }">
        <span>{{ node.label }}</span>
        <span>
          <el-button
            type="text"
            size="mini"
            @click="() => append(data)">
            Ajouter
          </el-button>
          <el-button
            type="text"
            size="mini"
            @click="() => remove(node, data)">
            Supprimer
          </el-button>
        </span>
      </span>
    </el-tree>
  </div>
</div>

<script>
  let id = 1000;

  export default {
    data() {
      const data = [{
        id: 1,
        label: 'Niveau un 1',
        children: [{
          id: 4,
          label: 'Niveau deux 1-1',
          children: [{
            id: 9,
            label: 'Niveau trois 1-1-1'
          }, {
            id: 10,
            label: 'Niveau trois 1-1-2'
          }]
        }]
      }, {
        id: 2,
        label: 'Niveau un 2',
        children: [{
          id: 5,
          label: 'Niveau deux 2-1'
        }, {
          id: 6,
          label: 'Niveau deux 2-2'
        }]
      }, {
        id: 3,
        label: 'Niveau un 3',
        children: [{
          id: 7,
          label: 'Niveau deux 3-1'
        }, {
          id: 8,
          label: 'Niveau deux 3-2'
        }]
      }];
      return {
        data4: JSON.parse(JSON.stringify(data)),
        data5: JSON.parse(JSON.stringify(data))
      }
    },

    methods: {
      append(data) {
        const newChild = { id: id++, label: 'testtest', children: [] };
        if (!data.children) {
          this.$set(data, 'children', []);
        }
        data.children.push(newChild);
      },

      remove(node, data) {
        const parent = node.parent;
        const children = parent.data.children || parent.data;
        const index = children.findIndex(d => d.id === data.id);
        children.splice(index, 1);
      },

      renderContent(h, { node, data, store }) {
        return (
          <span class="custom-tree-node">
            <span>{node.label}</span>
            <span>
              <el-button size="mini" type="text" on-click={ () => this.append(data) }>Ajouter</el-button>
              <el-button size="mini" type="text" on-click={ () => this.remove(node, data) }>Supprimer</el-button>
            </span>
          </span>);
      }
    }
  };
</script>

<style>
  .custom-tree-node {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 14px;
    padding-right: 8px;
  }
</style>

:::

Filtrage

Les noeuds peuvent être filtrés par mot-clé.

:::demo Utilisez la méthode filter de l'instance de Tree pour pouvoir filtrer les noeuds, son paramètre étant le mot-clé. Notez que pour que cela fonctionne, filter-node-method est requis, sa valeur étant la méthode de filtrage.

<el-input
  placeholder="Filter keyword"
  v-model="filterText">
</el-input>

<el-tree
  class="filter-tree"
  :data="data2"
  :props="defaultProps"
  default-expand-all
  :filter-node-method="filterNode"
  ref="tree2">
</el-tree>

<script>
  export default {
    watch: {
      filterText(val) {
        this.$refs.tree2.filter(val);
      }
    },

    methods: {
      filterNode(value, data) {
        if (!value) return true;
        return data.label.indexOf(value) !== -1;
      }
    },

    data() {
      return {
        filterText: '',
        data2: [{
          id: 1,
          label: 'Niveau un 1',
          children: [{
            id: 4,
            label: 'Niveau deux 1-1',
            children: [{
              id: 9,
              label: 'Niveau trois 1-1-1'
            }, {
              id: 10,
              label: 'Niveau trois 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: 'Niveau un 2',
          children: [{
            id: 5,
            label: 'Niveau deux 2-1'
          }, {
            id: 6,
            label: 'Niveau deux 2-2'
          }]
        }, {
          id: 3,
          label: 'Niveau un 3',
          children: [{
            id: 7,
            label: 'Niveau deux 3-1'
          }, {
            id: 8,
            label: 'Niveau deux 3-2'
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    }
  };
</script>

:::

Accordéon

Vous pouvez utiliser un mode accordéon afin que seul un noeud par niveau soit ouvert.

:::demo

<el-tree
  :data="data"
  :props="defaultProps"
  accordion
  @node-click="handleNodeClick">
</el-tree>

<script>
  export default {
    data() {
      return {
        data: [{
          label: 'Niveau un 1',
          children: [{
            label: 'Niveau deux 1-1',
            children: [{
              label: 'Niveau trois 1-1-1'
            }]
          }]
        }, {
          label: 'Niveau un 2',
          children: [{
            label: 'Niveau deux 2-1',
            children: [{
              label: 'Niveau trois 2-1-1'
            }]
          }, {
            label: 'Niveau deux 2-2',
            children: [{
              label: 'Niveau trois 2-2-1'
            }]
          }]
        }, {
          label: 'Niveau un 3',
          children: [{
            label: 'Niveau deux 3-1',
            children: [{
              label: 'Niveau trois 3-1-1'
            }]
          }, {
            label: 'Niveau deux 3-2',
            children: [{
              label: 'Niveau trois 3-2-1'
            }]
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    },
    methods: {
      handleNodeClick(data) {
        console.log(data);
      }
    }
  };
</script>

:::

Noeuds déplaçables

Vous pouvez déplacer les noeuds par drag'n drop en ajoutant l'attribut draggable.

:::demo

<el-tree
  :data="data6"
  node-key="id"
  default-expand-all
  @node-drag-start="handleDragStart"
  @node-drag-enter="handleDragEnter"
  @node-drag-leave="handleDragLeave"
  @node-drag-over="handleDragOver"
  @node-drag-end="handleDragEnd"
  @node-drop="handleDrop"
  draggable
  :allow-drop="allowDrop"
  :allow-drag="allowDrag">
</el-tree>

<script>
  export default {
    data() {
      return {
        data6: [{
          label: 'Niveau un 1',
          children: [{
            label: 'Niveau deux 1-1',
            children: [{
              label: 'Niveau trois 1-1-1'
            }]
          }]
        }, {
          label: 'Niveau un 2',
          children: [{
            label: 'Niveau deux 2-1',
            children: [{
              label: 'Niveau trois 2-1-1'
            }]
          }, {
            label: 'Niveau deux 2-2',
            children: [{
              label: 'Niveau trois 2-2-1'
            }]
          }]
        }, {
          label: 'Niveau un 3',
          children: [{
            label: 'Niveau deux 3-1',
            children: [{
              label: 'Niveau trois 3-1-1'
            }]
          }, {
            label: 'Niveau deux 3-2',
            children: [{
              label: 'Niveau trois 3-2-1'
            }]
          }]
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        }
      };
    },
    methods: {
      handleDragStart(node, ev) {
        console.log('drag start', node);
      },
      handleDragEnter(draggingNode, dropNode, ev) {
        console.log('tree drag enter: ', dropNode.label);
      },
      handleDragLeave(draggingNode, dropNode, ev) {
        console.log('tree drag leave: ', dropNode.label);
      },
      handleDragOver(draggingNode, dropNode, ev) {
        console.log('tree drag over: ', dropNode.label);
      },
      handleDragEnd(draggingNode, dropNode, dropType, ev) {
        console.log('tree drag end: ', dropNode && dropNode.label, dropType);
      },
      handleDrop(draggingNode, dropNode, dropType, ev) {
        console.log('tree drop: ', dropNode.label, dropType);
      },
      allowDrop(draggingNode, dropNode, type) {
        if (dropNode.data.label === 'Niveau deux 3-1') {
          return type !== 'inner';
        } else {
          return true;
        }
      },
      allowDrag(draggingNode) {
        return draggingNode.data.label.indexOf('Niveau trois 3-1-1') === -1;
      }
    }
  };
</script>

:::

Attributs

Attribut Description Type Valeurs acceptées Défaut
data Données de l'arbre array
empty-text Texte à afficher quand il n'y a pas de données. string
node-key Identifiant unique pour chaque noeud, doit être unique dans tout l'arbre. string
props Options de configuration, voir table suivante. object
render-after-expand Si les noeuds enfants doivent être générés seulement après la première ouverture du parent. boolean true
load Méthode pour charger les noeuds enfants, uniquement en mode lazy. function(node, resolve)
render-content Fonction de rendu pour les noeuds. Function(h, { node, data, store }
highlight-current Si le noeud courant est mis en valeur. boolean false
default-expand-all Si tout les noeud sont ouverts par défaut. boolean false
expand-on-click-node Si l'ouverture se fait aussi en cliquant sur le noeud. Si false, l'ouverture ne se fera qu'en cliquant sur l'icône. boolean true
check-on-click-node Si la sélection se fait aussi en cliquant sur le noeud. Si false, la sélection ne se fera qu'en cliquant sur la checkbox. boolean false
auto-expand-parent Si un noeud parent est automatiquement ouvert quand un noeud enfant s'ouvre. boolean true
default-expanded-keys Tableau des clés des noeuds initialement ouverts. array
show-checkbox Si un noeud est sélectionnable. boolean false
check-strictly Si la sélection d'un noeud affecte celle de son parent qaund show-checkbox est true. boolean false
default-checked-keys Tableau des clés des noeuds initialement sélectionnés. array
current-node-key Clé du noeud initialement sélectionné. string, number
filter-node-method Fonction executée sur chaque noeud pour le filtrage. Si elle retourne false, les noeuds seront cachés. Function(value, data, node)
accordion Si les noeuds fonctionnent en mode accordéon. boolean false
indent Indentation horizontale des noeuds en px. number 16
icon-class Icône pour chaque noeud. string - -
lazy Si les noeuds sont chargés en mode lazy, utilisé avec l'attribut load. boolean false
draggable Si les noeuds sont déplaçables par drag'n drop. boolean false
allow-drag Fonction exécutée avant le déplacement d'un noeud. Si false est retourné, le noeud ne sera pas déplaçable. Function(node)
allow-drop Fonction exécutée avant le placement d'un noeud. Si false est retourné, le noeud ne pourra être placé sur la zone en question. type a trois valeurs possibles: 'prev' (insertion avant le noeud cible), 'inner' (insertion dans le noeud cible) and 'next' (insertion après le noeud cible). Function(draggingNode, dropNode, type)

props

Attribut Description Type Accepted Values Défaut
label Détermine quelle clé de l'objet noeud représente le label. string, function(data, node)
children Détermine quelle clé de l'objet noeud représente les noeuds enfants. string
disabled Détermine quelle clé de l'objet noeud représente la désactivation du noeud. boolean, function(data, node)
isLeaf Détermine si le noeud est une feuille, ne marche qu'avec le mode lazy loading. boolean, function(data, node)

Méthodes

Tree possède les méthodes suivantes, qui retourne la sélection de noeuds actuelle.

Méthode Description Paramètres
filter Filtre les noeuds. Accepte un paramètre qui sera le premier paramètre de filter-node-method.
updateKeyChildren Ajoute de nouvelles données au noeud, ne marche que lorsque node-key est assigné. (key, data) Accepte deux paramètres: 1. clé du noeud 2. nouvelles données.
getCheckedNodes Si le noeud peut-être sélectionné (show-checkbox est true), il retourne un tableau des noeuds sélectionnés. (leafOnly, includeHalfChecked) Accepte deux booléen: 1. Défaut à false. Si true, retourne seulement un tableau des sous-noeuds sélectionnés. 2. Défaut à false. Si true, retourne la moitié des noeuds sélectionnés.
setCheckedNodes Détermine quels noeuds sont sélectionnés, ne marche que si node_key est assigné. Un tableau de noeuds qui doivent être sélectionnés.
getCheckedKeys Si le noeud peut être sélectionné (show-checkbox est true), retourne un tableau de clés des noeuds sélectionnés. (leafOnly) Booléen, défaut à false. Si à true, Il retourne seulement un tableau des sous-noeuds sélectionnés.
setCheckedKeys Détermine quels noeuds sont sélectionnés, ne marche que si node_key est assigné. (keys, leafOnly) Accepte deux paramètres: 1. un tableau de clés de noeuds à sélectionner 2. un booléen avec pour défaut false. Si à true, Il retourne seulement un tableau des sous-noeuds sélectionnés.
setChecked Détermine un noeud est sélectionnable, ne marche que si node_key est assigné. (key/data, checked, deep) Accepte trois paramètres: 1. La clé ou les données du noeud 2. un booléen indiquant si sélectionné. 3. un booléen indiquant si profond.
getHalfCheckedNodes Si le noeud peut être sélectionné (show-checkbox est true), retourne la moitié des noeuds sélectionnés. -
getHalfCheckedKeys Si le noeud peut être sélectionné (show-checkbox est true), retourne les clés de la moitié des noeuds sélectionnés. -
getCurrentKey retourne la clé du noeud actuellement en valeur (null si aucun noeud n'est en valeur).
getCurrentNode retourne les données du noeud actuellement en valeur (null si aucun noeud n'est en valeur).
setCurrentKey Met un noeud en valeur par sa clé, ne marche que si node_key est assigné. (key) la clé du noeud. Si null, annule la sélection actuelle.
setCurrentNode Met un noeud en valeur, ne marche que si node_key est assigné. (node) le noeud.
getNode Retourne le noeud grâce à sa clé ou ses données. (data) la clé ou les données du noeud.
remove Supprime un noeud, ne marche que si node-key est assigné. (data) le noeud ou ses données à supprimer.
append Ajoute un noeud à un autre noeud. (data, parentNode) 1. les données du noeud à ajouter 2. les données du parent, clé ou données.
insertBefore Insère un noeud avant un autre noeud. (data, refNode) 1. Les données du noeud à insérer 2. Clé ou noeud de référence.
insertAfter Insère un noeud après un autre noeud. (data, refNode) 1. Les données du noeud à insérer 2. Clé ou noeud de référence.

Évènements

Nom Description Paramètres
node-click Se déclenche quand est cliqué. Le noeud cliqué, la propriété node de TreeNode, TreeNode lui-même.
node-contextmenu Se déclenche quand un noeud reçoit un clic droit. L'évènement, le noeud cliqué, la propriété node de TreeNode, TreeNode lui-même.
check-change Se déclenche quand quand la sélection d'un noeud change. Le noeud modifié, si le noeud est sélectionné, si des enfants sont sélectionnés.
check Se déclenche après un clic sur le checkbox. Le noeud modifié, l'objet statut de l'arbre avec quatre propriétés: checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys.
current-change Se déclenche quand le noeud courant changes. Le noeud courant, la propriété node de TreeNode
node-expand Se déclenche quand le noeud courant s'ouvre. Le noeud ouvert, la propriété node de TreeNode, TreeNode lui-même.
node-collapse Se déclenche quand le noeud courant se ferme. Le noeud fermé, la propriété node de TreeNode, TreeNode lui-même.
node-drag-start Se déclenche quand le déplacement commence. Le noeud déplacé, l'évènement.
node-drag-enter Se déclenche quand le noeud déplacé entre dans un autre noeud. Le noeud déplacé, l'autre noeud, l'évènement.
node-drag-leave Se déclenche quand le noeud déplacé quitte un autre noeud. Le noeud déplacé, l'autre noeud, l'évènement.
node-drag-over Se déclenche quand le noeud passe au-dessus d'un autre noeud (comme l'évènement mouseover). Le noeud déplacé, l'autre noeud, l'évènement.
node-drag-end Se déclenche quand le déplacement se termine. Le noeud déplacé, le noeud d'arrivée (peut-être undefined), le type de placement (before / after / inner), l'évènement.
node-drop Se déclenche après que le noeud déplacé soit placé. Le noeud déplacé, le noeud d'arrivée, le type de placement (before / after / inner), l'évènement.

Slot avec portée

Nom Description
Le contenu personnalisé des noeuds. les paramètres sont { node, data }.