Fermer

septembre 3, 2019

Comment cibler le DOM dans Vue


Une pratique très courante dans le développement Web consiste à cibler un élément de votre DOM et à le manipuler d'une manière ou d'une autre. Voyons la puissance de la référence dans Vue avec un exemple facile à suivre.

Une pratique très courante en développement Web consiste à cibler un élément de votre DOM (modèle d'objet de document) (autrement dit, tous vos éléments HTML et leur structure logique). de le manipuler d’une manière ou d’une autre.

Dans cet article, nous allons vérifier le pouvoir de réf et de certains de ses cas extrêmes. Préparez votre pain et pelons-le.

Knights of the Old Vuepublic

Pour ceux d'entre nous qui venons de l'ancien régime, alias jQuery nous étions très habitués à viser un DOM. élément de notre page pour le modifier ou l’utiliser de quelque manière que ce soit. En fait, cela était presque inévitable dans les cas où vous souhaitiez utiliser n'importe quel type de plugin utilisant un élément de votre page.

Dans jQuery vous sélectionneriez un élément en le ciblant avec le $ () ce qui ouvrirait une grande variété de méthodes pour manipuler cet objet. Prenons l'exemple d'une div dans laquelle vous souhaitez définir ou basculer la visibilité en basculant autour de la propriété CSS de l'affichage .

Considérons le balisage suivant pour notre exemple. 19659008] I is hidden

I est montré
I is ?


Dans jQuery ceci ressemblerait à ce qui suit:

     $ ('# datOneDiv'). Css (' bloc de visualisation');

Quelques éléments intéressants à mentionner ici. Tout d'abord, remarquez que nous visons un div très spécifique dans notre document, celui portant le id de de datOneDiv vu par le sélecteur ] #datOneDiv (le # fonctionne ici de la même manière qu'un sélecteur CSS, il désigne un identifiant).

La deuxième chose à noter est que, aussi incroyablement simple que cela puisse être, il a empêché de nombreuses personnes de réellement apprendre à utiliser JavaScript, qui au fil du temps est devenu un problème.

Avez-vous même JS, Breh? ??

En JavaScript vanille, le même résultat peut être obtenu en utilisant querySelector et certaines manipulations de propriétés.

     document.querySelector ('# datOneDiv'). Style.display = 'block' ;

Ce qu'il faut noter à propos de cet exemple, c'est qu'une fois encore, nous utilisons un id pour cibler une partie div très spécifique de notre document. Certes, nous aurions aussi pu cibler le div avec sa classe en faisant .myCoolClass mais comme vous le découvrirez, le même problème se posera.

The Vue Awakens

Nous allons tuer des Sith aujourd'hui. Ne vous inquiétez pas, aucun type à l'air froid et corné n'a été blessé dans la rédaction de cet article.

Envisagez le composant Vue suivant Sith.vue .

      

Je sais, je sais. Amaga, je devrais utiliser des cours dynamiques, ton exemple est si mauvais, l'avocat est fou et tu n'es plus ma meilleure. C’est correct, je ne vous ai pas aimé de toute façon. Cependant, à titre d'exemple, supposons que nous ne sachions pas tout ce bien-être de Vue et que nous essayions en fait de cibler le DOM de cette façon pour y apporter des modifications. (Blagues à part, s'il existe un moyen d'appliquer des classes ou des styles de manière dynamique, vous devriez TOUJOURS opter pour le faire avec des propriétés dynamiques! Nous ne faisons que ceci, à titre d'exemple simple à suivre.)

Si nous instancions cela composant dans notre App.vue ou notre point d’entrée principal de l’application, et nous cliquons sur le bouton, vous remarquerez que cela fonctionne réellement. Alors, pourquoi exactement nous a-t-on dit à maintes reprises qu'il était tellement mauvais de cibler le DOM directement dans Vue comme nous le faisons ici?

Essayez de modifier votre modèle principal (ou l'endroit où vous testez ces composants) pour en contenir deux. ou plusieurs seigneurs Sith, comme tel.

  

Maintenant, vas-y et clique sur le second pour le tuer. HUH. La force est faible avec celui-ci. Savez-vous ce qui s'est passé?

Lorsque la méthode du composant keelItWithFire se déclenche sur le second composant, la méthode querySelector passe par le DOM et tente de trouver le premier exemple d'un élément de la classe sithLord et bien sûr, il le trouve!

Le grand problème du ciblage direct du DOM dans Vue est tout d'abord que les composants sont censés être réutilisables et dynamiques Donc, nous ne pouvons pas garantir que la classe ici sera unique .

Bien, nous pouvons utiliser un id vous voyez! Et vous êtes partiellement correct, attribuer un attribut id à un modèle dans Vue en quelque sorte garantit son unicité, prouvant que vous n'instanciez pas plus d'un seul de ces composants dans l'ensemble de votre application (sinon vous rencontrerez essentiellement le même problème que précédemment).

La deuxième mise en garde est que vous devrez également garantir qu'aucune autre fonctionnalité de votre application, aucun autre développeur et aucune autre La bibliothèque va créer un élément pouvant contenir le même objet id .

La voie du vuedi

Vue ou pas, rien n’est tenté.

Dans Vue, nous en avons beaucoup d'outils pour modifier le modèle de manière dynamique à travers les propriétés calculées, l'état local, les liaisons dynamiques, etc. Mais il viendra un moment où vous serez confronté à la nécessité de cibler réellement le DOM. Quelques raisons courantes sont de mettre en œuvre un plugin externe non spécifique à Vue, ou de cibler un champ dans un formulaire et de le centrer, par exemple.

Lorsqu'un tel cas se présente, nous avons un attribut plutôt intéressant peut gifler des éléments appelés ref . Vous pouvez consulter la documentation officielle ici .

Nous allons créer un nouveau composant, cette fois un Jedi.vue et nous allons le faire Les choses que nous sommes censés voir dans Vue.

      

Quoi, vous pensiez que parce qu’ils étaient Jedi, nous n’allions pas? Il n'y a rien qui cloche avec un petit hippo, ce n'est pas AUCUN.

Maintenant, l'important est de comprendre ce qui se passe lorsque l'on ajoute un attribut ref à l'un des éléments sur notre