Szukaj…


Składnia

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

Parametry

Parametr Detale
id String - Identyfikator dyrektywy, który będzie używany bez prefiksu v- . (Dodaj prefiks v- gdy go używasz)
definition Obiekt - obiekt definicji może zapewniać kilka funkcji przechwytujących (wszystkie opcjonalne): bind , update i unbind

Podstawy

Oprócz domyślnego zestawu dyrektyw dostarczanych w rdzeniu, Vue.js umożliwia także rejestrowanie dyrektyw niestandardowych. Niestandardowe dyrektywy zapewniają mechanizm mapowania zmian danych na dowolne zachowanie DOM.

Możesz zarejestrować globalną dyrektywę niestandardową za pomocą metody Vue.directive(id, definition) , przekazując identyfikator dyrektywy, a następnie obiekt definicji. Możesz także zarejestrować lokalną dyrektywę niestandardową, włączając ją w opcję directives komponentu.

Funkcje zaczepu

  • bind : wywoływany tylko raz, gdy dyrektywa jest najpierw powiązana z elementem.
  • aktualizacja : wywoływana po raz pierwszy natychmiast po bind z wartością początkową, a następnie ponownie za każdym razem, gdy zmienia się wartość wiązania Nowa wartość i poprzednia wartość są podane jako argument.
  • unbind : wywoływany tylko raz, gdy dyrektywa jest niezwiązana z elementem.
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()
     }    
})

Po rejestracji możesz używać go w szablonach Vue.js takich jak ten (pamiętaj, aby dodać przedrostek v- ):

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

Gdy potrzebujesz tylko funkcji update , możesz przekazać jedną funkcję zamiast obiektu definicji:

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

Właściwości wystąpienia dyrektywy

Wszystkie funkcje hak zostaną skopiowane do aktualnej dyrektywy obiektu, który można uzyskać dostęp do tych funkcji wewnątrz ich this kontekście. Obiekt dyrektywy ujawnia kilka użytecznych właściwości:

  • el : element związany z dyrektywą.
  • vm : kontekst ViewModel, który jest właścicielem tej dyrektywy.
  • wyrażenie : wyrażenie wiązania, z wyłączeniem argumentów i filtrów.
  • arg : argument, jeśli jest obecny.
  • name : nazwa dyrektywy bez prefiksu.
  • modyfikatory : obiekt zawierający modyfikatory, jeśli występują.
  • deskryptor : obiekt zawierający wynik analizy całej dyrektywy.
  • parametry : obiekt zawierający atrybuty parametrów. Wyjaśniono poniżej.

Wszystkie te właściwości należy traktować jako tylko do odczytu i nigdy ich nie modyfikować. Możesz także dołączyć właściwości niestandardowe do obiektu dyrektywy, ale uważaj, aby przypadkowo nie zastąpić istniejących właściwości wewnętrznych.

Przykład niestandardowej dyrektywy wykorzystującej niektóre z tych właściwości:

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!'
  }
})

Wynik

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

Obiekt dosłowny

Jeśli twoja dyrektywa wymaga wielu wartości, możesz również przekazać literał obiektu JavaScript. Pamiętaj, że dyrektywy mogą przyjmować dowolne prawidłowe wyrażenie JavaScript:

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!"
})

Dosłowny modyfikator

Gdy dyrektywa jest używana z modyfikatorem dosłownym, jej wartość atrybutu zostanie zinterpretowana jako zwykły ciąg i przekazana bezpośrednio do metody update . Metoda update zostanie również wywołana tylko raz, ponieważ zwykły ciąg znaków nie może być reaktywny.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow