Vue.js
Benutzerdefinierte Richtlinien
Suche…
Syntax
-
Vue.directive(id, definition); -
Vue.directive(id, update); //when you need only the update function.
Parameter
| Parameter | Einzelheiten |
|---|---|
id | String - Die Direktive-ID, die ohne das v- Präfix verwendet wird. (Fügen Sie das v- Präfix hinzu, wenn Sie es verwenden) |
definition | Object - Ein Definitionsobjekt kann mehrere Hook-Funktionen (alle optional) bereitstellen: bind , update und unbind |
Grundlagen
Zusätzlich zu den Standardvorgaben, die im Kern ausgeliefert werden, können Sie mit Vue.js auch benutzerdefinierte Anweisungen registrieren. Benutzerdefinierte Anweisungen bieten einen Mechanismus zum Zuordnen von Datenänderungen zu beliebigem DOM-Verhalten.
Sie können eine globale benutzerdefinierte Direktive mit der Methode Vue.directive(id, definition) registrieren und eine Direktive-ID übergeben, auf die ein Definitionsobjekt folgt. Sie können auch eine lokale benutzerdefinierte Direktive registrieren, indem Sie sie in die directives Option einer Komponente aufnehmen.
Hook-Funktionen
- bind : Wird nur einmal aufgerufen, wenn die Direktive zuerst an das Element gebunden wird.
- update : wurde zum ersten Mal unmittelbar nach dem
bindmit dem Anfangswert aufgerufen und dann erneut, wenn sich der Bindungswert ändert. Der neue Wert und der vorherige Wert werden als Argument bereitgestellt. - Unbind : wird nur einmal aufgerufen, wenn die Direktive vom Element getrennt wird.
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()
}
})
Nach der Registrierung können Sie es wie folgt in Vue.js-Vorlagen verwenden (denken Sie daran, das v- Präfix hinzuzufügen):
<div v-my-directive="someValue"></div>
Wenn Sie nur die update benötigen, können Sie anstelle des Definitionsobjekts nur eine einzige Funktion übergeben:
Vue.directive('my-directive', function (value) {
// this function will be used as update()
})
Eigenschaften der Direktiveinstanz
Alle Hook - Funktionen werden in die eigentliche Richtlinie Objekt kopiert, die Sie in diesen Funktionen als ihre zugreifen können this Kontext. Das Direktive-Objekt macht einige nützliche Eigenschaften verfügbar:
- el : das Element, an das die Direktive gebunden ist.
- vm : Der Kontext ViewModel, dem diese Direktive gehört.
- Ausdruck : Der Ausdruck der Bindung, ohne Argumente und Filter.
- arg : das Argument, falls vorhanden.
- name : Der Name der Direktive ohne Präfix.
- Modifikatoren : ein Objekt, das ggf. Modifikatoren enthält.
- Deskriptor : Ein Objekt, das das Analyseergebnis der gesamten Direktive enthält.
- params : ein Objekt, das Parameterattribute enthält. Unten erklärt.
Sie sollten alle diese Eigenschaften als schreibgeschützt behandeln und niemals ändern. Sie können dem Direktive-Objekt auch benutzerdefinierte Eigenschaften hinzufügen. Achten Sie jedoch darauf, vorhandene interne Eigenschaften nicht versehentlich zu überschreiben.
Ein Beispiel für eine benutzerdefinierte Direktive, die einige dieser Eigenschaften verwendet:
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!'
}
})
Ergebnis
name - demo
expression - msg
argument - hello
modifiers - {"b":true,"a":true}
value - hello!
Objekt-Literal
Wenn Ihre Anweisung mehrere Werte erfordert, können Sie auch ein JavaScript-Objektliteral übergeben. Denken Sie daran, dass Anweisungen jeden gültigen JavaScript-Ausdruck annehmen können:
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!"
})
Wörtliche Modifikation
Wenn eine Anweisung mit dem literal-Modifizierer verwendet wird, wird der Attributwert als einfacher String interpretiert und direkt an die update . Die update wird auch nur einmal aufgerufen, da eine einfache Zeichenfolge nicht reaktiv sein kann.
HTML
<div v-demo.literal="foo bar baz">
JavaScript
Vue.directive('demo', function (value) {
console.log(value) // "foo bar baz"
})