Согласно списку репозитория Awesome Vue, https://github.com/vuejs/awesome-vue существует два альтернативных модуля внедрения зависимостей Vue.
- Vue-container - простая библиотека внедрения зависимостей для Vue 2.
- Vue-inject - Внедрение зависимостей для компонентов Vue 2.x
Давайте сравним их.
Пример использования Vue-контейнера.
import Vue from 'vue'; //Register vue-container with Vue import Vuec from 'vue-container'; Vue.use(Vuec); //Register axios in DI container import Axios from 'axios'; Vue.$ioc.register('Axios', Axios); //Manually get axios from DI container const Axios = Vue.$ioc.resolve('Axios'); //Automatically inject axios in this.$services.axios new Vue({ services: ['$axios'], mounted() { // the axios service is available under } }) //Automatically inject axios as lifecycle function argument new Vue({ mounted(axios) { }}); })
Пример использования Vue-inject:
import Vue from 'vue'; //Register vue-injector with Vue import injector from 'vue-inject'; Vue.use(injector); //Register number in DI container injector.constant('three', 3); //Register factory which makes a function to sum 3 with any number injector.factory('threeAdder', 'three', function (three){ return function(number){ return three + number; } }); //Register service which provides a method to add 3 with any number injector.service('myService', ['threeAdder'], function (threeAdder){ this.addToThree = function(addWhat) { return threeAdder(addWhat); } }); //Manually get service myService const myService = injector.get('myService'); myService.addToThree(2); //Inject something to a component const component = { ... dependencies : ['myFactory'] }; //Inject stuff to every component Vue.prototype.dependencies = ['myService'];
Итак, к заключению.
Vue-component - это очень легкая структура DI, которая позволяет вам регистрировать и вручную или автоматически вводить что-либо в любом месте.
Vue-inject немного более функциональный, он позволяет все, что делает vue-component. Но также он вводит простую реализацию службы / фабрики / константы с поддержкой автоматической инъекции (в виде аргументов) ранее зарегистрированных сущностей, что делает ее очень похожей на стиль инжектора зависимостей Angular.
Я бы рекомендовал использовать Vue-component, если вам нужно очень простое, но элегантное решение DI для вашего приложения, и Vue-inject, если вам не хватает инъекций в стиле Angular или просто нужно что-то более универсальное.