Was genau ist Vue.use? In diesem Artikel stellen wir Ihnen Vue.use vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Wenn wir Vue für die Projektentwicklung verwenden, sehen wir, dass viele Räder über Vue.use
verwendet werden, was sich sehr fortschrittlich anfühlt. Vue.use
来进行使用,感觉甚是高大上。
不过Vue.use
到底是什么鬼?不妨来看个究竟。
其实这些轮子都可以称之为插件,它的功能范围没有严格的限制,一般包含如下几种:
vue-custom-element
vue-touch
vue-router
Vue
实例方法,通过把它们添加到 Vue.prototype
上实现。vue-router
无论大小,插件要实现的功能无非就是上述这几种。但是,这并不妨碍我们创造出复杂的插件,不过我们还是希望给用户提供一个简单的使用方法,他不需要关注插件内部做了些什么。固Vue提供了use方法,专门来在new Vue()
之前使用插件。
不管是官方提供的插件(例如vue-router
、vuex
),还是第三方的插件(例如ElementUI
、ant
)都是采用了此方式,不外乎插件内部的功能不同而已。当然,还有其他诸多此类插件,awesome-vue 就集合了大量由社区贡献的插件和库。
接下来,我们就来看下这个神秘的use
方法是如何实现的。
Vue.js
的插件应该暴露一个 install
方法。这个方法的第一个参数是 Vue
构造器,第二个参数是一个可选的选项对象,用于传入插件的配置:
MyPlugin.install = function (Vue, options) { // 1. 添加全局方法或属性 Vue.myGlobalMethod = function () { // 逻辑... } // 2. 添加全局资源 Vue.directive('my-directive', { bind (el, binding, vnode, oldVnode) { // 逻辑... } ... }) // 3. 注入组件选项 Vue.mixin({ created: function () { // 逻辑... } ... }) // 4. 添加实例方法 Vue.prototype.$myMethod = function (methodOptions) { // 逻辑... } // 5. 注册全局组件 Vue.component('myButton',{ // ...组件选项 }) }
Vue.use(MyPlugin,{ // ...options })
一个插件内部大概就是如上所示,其实也不外乎上述那几种东西,甚是简单。接下来我们就来看下真实的案例ElementUI
:
const components = [ Pagination, Dialog, Autocomplete/* 此处由于篇幅省略若干个组件 */]; const install = function(Vue, opts = {}) { locale.use(opts.locale); locale.i18n(opts.i18n); // 注册全局组件 components.forEach(component => { Vue.component(component.name, component); }); Vue.use(InfiniteScroll); Vue.use(Loading.directive); // 添加实例方法 Vue.prototype.$ELEMENT = { size: opts.size || '', zIndex: opts.zIndex || 2000 }; // 添加实例方法 Vue.prototype.$loading = Loading.service; Vue.prototype.$msgbox = MessageBox; Vue.prototype.$alert = MessageBox.alert; Vue.prototype.$confirm = MessageBox.confirm; Vue.prototype.$prompt = MessageBox.prompt; Vue.prototype.$notify = Notification; Vue.prototype.$message = Message; }; /* istanbul ignore if */ if (typeof window !== 'undefined' && window.Vue) { install(window.Vue); } export default { version: '2.13.0', locale: locale.use, i18n: locale.i18n, install, CollapseTransition, Loading, Pagination, Dialog, Autocomplete, // ...other components };
我们不难发现,其实自己来实现一个插件也是超级简单,只要对外暴露一个install
方法即可,在使用Vue.use
的时候,会调用这个方法。所以我们只要将要实现的内容放到install
内部即可。这样的好处就是插件需要一开始调用的方法都封装在install
里面,更加精简和可拓展性更高。
大家可能也有注意到,这里的install
其实是将所有的组件全部引入了。作为一个庞大的插件库,这样可能会有一些性能问题。用过的ElementUI
的同学都知道,它是支持按需引入的,其实在上面的示例中也可以发现一些蛛丝马迹。
const components = [ Pagination, Dialog, Autocomplete/* 此处由于篇幅省略若干个组件 */]; // ....省去中间内容 export default { version: '2.13.0', locale: locale.use, i18n: locale.i18n, install, CollapseTransition, Loading, Pagination, Dialog, Autocomplete, // ...other components };
这里将每个组件都单独都导出了,而在每个组件内部,也类似的暴露了install
来组件每个组件,这样就可以单独Vue.use
每个组件,从而实现按需引入的目的。
import Alert from './src/main'; /* istanbul ignore next */ Alert.install = function(Vue) { Vue.component(Alert.name, Alert); }; export default Alert;
除了上述内容之外,还有几点值得我们注意一下:
install
方法,如果是一个函数,则执行它自身,并bind
this
为null
,然后传入额外的参数if (typeof plugin.install === 'function') { plugin.install.apply(plugin, args); } else if (typeof plugin === 'function') { plugin.apply(null, args); }
installed
的属性,其值为true
。Vue.use
方法内部会检测插件的installed
属性,从而避免重复注册插件Vue.use
Vue.use
? Werfen wir einen Blick darauf, was passiert. Das Innere eines Plug-Ins ist wahrscheinlich wie folgt Wie oben gezeigt, handelt es sich tatsächlich um nichts weiter als die oben genannten Dinge, sehr einfach. Schauen wir uns als Nächstes einen realen Fall vonTatsächlich können diese Räder als Plug-Ins bezeichnet werden und ihr Funktionsumfang ist nicht streng eingeschränkt. Sie umfassen im Allgemeinen die folgenden Typen:
Egal wie groß oder klein, die Funktionen, die Plug-Ins erreichen müssen, sind nichts weiter als die oben genannten. Dies hindert uns jedoch nicht daran, komplexe Plug-Ins zu erstellen. Wir hoffen jedoch, den Benutzern eine einfache Verwendungsmethode zu bieten, ohne dass sie darauf achten müssen, was im Plug-In geschieht. Vue bietet eine Verwendungsmethode speziell für die Verwendung von Plug-Ins vor
- Globale Methoden oder Attribute hinzufügen. Zum Beispiel:
vue-custom-element
- Globale Ressourcen hinzufügen: Anweisungen/Filter/Übergänge/Komponenten usw. Beispielsweise fügt
vue-touch
- einige Komponentenoptionen durch globales Mischen hinzu. Beispielsweise fügt
vue-router
Vue
-Instanzmethoden hinzu, indem es sie zuVue.prototype
hinzufügt.- Eine Bibliothek, die ihre eigene API bereitstellt und gleichzeitig eine oder mehrere der oben genannten Funktionen bereitstellt. Zum Beispiel
vue-router
new Vue()
.Ob es sich um ein offiziell bereitgestelltes Plug-in (wie
vue-router
,vuex
) oder ein Drittanbieter-Plug-in (wieElementUI, <code> ant
) übernehmen alle diese Methode, aber die Funktionen innerhalb des Plug-Ins sind unterschiedlich. Natürlich gibt es noch viele andere solcher Plug-ins, awesome- vue Es verfügt über eine große Sammlung von Plugins und Bibliotheken, die von der Community bereitgestellt wurden.Als nächstes werfen wir einen Blick darauf, wie diese mysteriöse
rrreeerrreeeuse
-Methode implementiert wird. DasVue.js
-Plugin sollte eineinstall
-Methode verfügbar machen. Der erste Parameter dieser Methode ist derVue
-Konstruktor und der zweite Parameter ist ein optionales Optionsobjekt, das zur Übergabe der Plug-In-Konfiguration verwendet wird:
ElementUI
an:rrreeeEs ist nicht schwer festzustellen, dass es tatsächlich super einfach ist, ein Plug-in selbst zu implementieren, solange Sie eine Installation verfügbar machen
-Methode nach außen Das ist es. Diese Methode wird aufgerufen, wenn Vue.use
verwendet wird. Wir müssen also nur den zu implementierenden Inhalt in install
einfügen. Dies hat den Vorteil, dass die Methoden, die das Plug-in zu Beginn aufrufen muss, in install
gekapselt sind, was schlanker und skalierbarer ist.
Vielleicht fällt Ihnen auch auf, dass install
hier tatsächlich alle Komponenten einführt. Da es sich um eine große Plug-in-Bibliothek handelt, kann es zu Leistungsproblemen kommen. Schüler, die ElementUI
verwendet haben, wissen, dass es die On-Demand-Einführung unterstützt. Tatsächlich können einige Hinweise im obigen Beispiel gefunden werden.
install
auf ähnliche Weise bereitgestellt, um jede Komponente zusammenzubauen, sodass Sie jede Komponente separat Vue.use
können können auf Anfrage eingeführt. 🎜rrreee🎜Darüber hinaus gibt es ein paar Punkte, die es zu beachten gilt: 🎜install
ausgeführt. Wenn es sich um eine Funktion handelt, führen Sie sie selbst aus, setzen Sie bind
this
auf null
und übergeben Sie dann zusätzliche Parameterinstalled
-Attribut mit dem Wert true. Die Methode <code>Vue.use
erkennt intern das Attribut installed
des Plug-ins, um eine wiederholte Registrierung des Plug-ins
Vue.use
Tatsächlich ist es nicht mysteriös. Der Innenraum besteht immer noch aus den gleichen Dingen, die wir normalerweise verwenden, aber er ist nur mit einem hochwertigen Mantel bedeckt. Wir können auch versuchen, diese Methode während der Entwicklung zu verwenden, was nicht nur einfach, sondern auch leistungsstark ist. 🔜 Besuchen Sie: 🎜Einführung in die Programmierung🎜! ! 🎜🎜Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, was Vue.use ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!