Recherche…


Syntaxe

  • Vue.directive(id, definition);
  • Vue.directive(id, update); //when you need only the update function.

Paramètres

Paramètre Détails
id String - Identifiant de la directive qui sera utilisé sans le préfixe v- . (Ajoutez le préfixe v- lors de son utilisation)
definition Object - Un objet de définition peut fournir plusieurs fonctions de hook (toutes facultatives): bind , update et unbind

Les bases

Outre le jeu de directives par défaut fourni par core, Vue.js vous permet également d’enregistrer des directives personnalisées. Les directives personnalisées fournissent un mécanisme pour mapper les modifications de données à un comportement DOM arbitraire.

Vous pouvez enregistrer une directive personnalisée globale avec la Vue.directive(id, definition) , en transmettant une directive id suivie d'un objet de définition. Vous pouvez également enregistrer une directive personnalisée locale en l'incluant dans l'option de directives un composant.

Fonctions de crochet

  • bind : appelé une seule fois, lorsque la directive est liée en premier à l'élément.
  • update : appelé pour la première fois immédiatement après la bind avec la valeur initiale, puis à nouveau chaque fois que la valeur de la liaison change. La nouvelle valeur et la valeur précédente sont fournies comme argument.
  • unbind : appelé une seule fois, lorsque la directive n'est pas liée à l'élément.
Vue.directive('my-directive', {
     bind: function () {
       // do preparation work
       // e.g. add event listeners or expensive stuff
       // that needs to be run only once
     },
     update: function (newValue, oldValue) {
       // do something based on the updated value
       // this will also be called for the initial value
     },
     unbind: function () {
       // do clean up work
       // e.g. remove event listeners added in bind()
     }    
})

Une fois inscrit, vous pouvez l'utiliser dans les modèles Vue.js comme ceci (n'oubliez pas d'ajouter le préfixe v- ):

<div v-my-directive="someValue"></div>

Lorsque vous n'avez besoin que de la fonction de update , vous pouvez transmettre une seule fonction à la place de l'objet de définition:

Vue.directive('my-directive', function (value) {
  // this function will be used as update()
})

Propriétés d'instance directive

Toutes les fonctions de crochet seront copiés dans l'objet directive réelle, que vous pouvez accéder à l' intérieur de ces fonctions comme this contexte. L'objet directive expose certaines propriétés utiles:

  • el : l'élément auquel la directive est liée.
  • vm : le contexte ViewModel qui possède cette directive.
  • expression : expression de la liaison, excluant les arguments et les filtres.
  • arg : l'argument, si présent.
  • name : le nom de la directive, sans le préfixe.
  • modifiers : un objet contenant des modificateurs, le cas échéant.
  • descriptor : objet contenant le résultat d'analyse de la directive entière.
  • params : un objet contenant des attributs param. Expliqué ci-dessous.

Vous devez traiter toutes ces propriétés en lecture seule et ne jamais les modifier. Vous pouvez également associer des propriétés personnalisées à l'objet directive, mais veillez à ne pas remplacer accidentellement des objets internes existants.

Un exemple de directive personnalisée utilisant certaines de ces propriétés:

HTML

<div id="demo" v-demo:hello.a.b="msg"></div>

JavaScript

Vue.directive('demo', {
  bind: function () {
    console.log('demo bound!')
  },
  update: function (value) {
    this.el.innerHTML =
      'name - '       + this.name + '<br>' +
      'expression - ' + this.expression + '<br>' +
      'argument - '   + this.arg + '<br>' +
      'modifiers - '  + JSON.stringify(this.modifiers) + '<br>' +
      'value - '      + value
  }
})
var demo = new Vue({
  el: '#demo',
  data: {
    msg: 'hello!'
  }
})

Résultat

name - demo
expression - msg
argument - hello
modifiers - {"b":true,"a":true}
value - hello!

Littéral d'objet

Si votre directive nécessite plusieurs valeurs, vous pouvez également transmettre un littéral d'objet JavaScript. Rappelez-vous que les directives peuvent prendre n'importe quelle expression JavaScript valide:

HTML

<div v-demo="{ color: 'white', text: 'hello!' }"></div>

JavaScript

Vue.directive('demo', function (value) {
  console.log(value.color) // "white"
  console.log(value.text) // "hello!"
})

Modificateur littéral

Lorsqu'une directive est utilisée avec le modificateur literal, sa valeur d'attribut sera interprétée comme une chaîne de caractères et transmise directement à la méthode de update . La méthode de update sera également appelée une seule fois, car une chaîne simple ne peut pas être réactive.

HTML

<div v-demo.literal="foo bar baz">

JavaScript

Vue.directive('demo', function (value) {
  console.log(value) // "foo bar baz"
})


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow