[Vue] ist eine [Javascript Framework|Javascript Frameworks] für das Erstellen und Instantiieren von Oberflächen-Komponenten. !!!Allgemeines Am Besten versendet man [Vue] zusammen mit [RequireJS], damit man Komponenten dynamisch laden kann. !!!Application Um eine Vue-Applikation zu starten, wird eine bestehendes HTML-Tag verwendet: {{{ new Vue({ el: "#vue-root" }); }}} !!RequireJS Zusammen mit [RequireJS] sieht es dann so aus: {{{ define(["vue"], function(Vue) { return new Vue({ el: "#vue-root" }); }); }}} !!!Components Komponenten werden mit Vue.component definiert: {{{ define(["vue"], function(Vue) { return Vue.component("simple-component", { props: { value: String }, template: '<div>{{value}}</div>' }); }); }}} !!!Reactivity [Vue] implementiert standardmäßig Reactivity. Änderungen in Properties führen zu Änderungen in der View (dem DOM-Tree). Allerdings gibt es einige Besonderheiten. !!Simple Property Einfache Properties, etwa String, Number, Boolean sind nicht reaktiv, da das zugrundeliegende Objekt nicht beobachtet werden kann. Die Reaktivität kann programmatisch vorgenommen werden. Child: {{{ methods: { _visible: function(visible) { this.$emit("update:visible", visible); } } }}} Parent: {{{ <dialog-panel :visible.sync="visible">[...]</dialog-panel> }}} !!!Integration Es ist besser, Applikationen von vorne herein mit [Vue] zu bauen. Manchmal möchte man [Vue] in eine bestehende Application integrieren. Insbesondere wenn diese JQuery und traditionelles Inline-Scripting verwendet, ist eine gewisse Konfiguration erforderlich: index.html: {{{ <html> <head> <script type="text/javascript" src="jquery-1.12.4.min.js"></script> <script type="text/javascript" src="jquery-ui.min.js"></script> <script type="text/javascript" src="require.js" data-main="main"></script> </head> <body> <div id="vue-root><template> [...] </template></div> </body< </html> }}} main.js: {{{ window.$.holdReady(true); requirejs.undef("jquery"); requirejs.undef("jquery-ui"); define(["vue", "jquery", "jquery-ui"], function(Vue, $) { return new Vue({ el: "#vue-root", created: function() { this.scripts = $("template", this.$options.el).contents().find("script"); }, mounted: function() { window.eval(this.scripts.text()); window.$.holdReady(false); } }); }); }}} __Erklärung:__ Zunächst wird das bestehende [JQuery] auf Hold gesetzt, so dass dessen Ready-Function erst nach der Initialisierung ausgeführt werden. Dies ist wichtig, da während der Intitialisierung vom neuen [JQuery] die globalen Variablen überschrieben werden, bis diese schließlich mit $.noConflict() wieder hergestellt werden. Des Weiteren wird ein <template>-Tag eingefügt, sodass keine <script>-Tags ausgeführt werden, bevor [Vue] vollständig initialisiert ist. [Vue] manipuliert den DOM-Tree im Browser, das zur Störung von Inline-Scripten und Tag-Referenzen führen kann. Inline-Skript-Tags werden in der Vue-Phase "created" zunächst eingesammelt und in der Phase "mounted" schließlich ausgeführt. Dann wird das [JQuery] wieder freigegeben zum Ausführen ($.holdReady). !!!Links * [Awesome Vue Komponenten|https://github.com/vuejs/awesome-vue]