# Справочник API
# @Injectable
@Injectable
— это декоратор, предназначенный для объявления сервиса. По умолчанию в созданном сервисе в свойстве vm
доступно приложение Vue
. Кроме того, существует возможность внедрить дополненные сервисы в текущий и добавить собственный контекст.
@Injectable
должен быть обязательно указан для создаваемого сервиса.
# useFactory
тип:
function
не обязательный
Сигнатура:
useFactory() => any
Использование фабрики для построения сервиса.
class Logger { ... } @Injectable({ useFactory: () => new Logger() }) class UserService extends Inject {}
# useValue
type:
любой
не обязательный
Сигнатура:
Использование значения для построения сервиса.
@Injectable({ useValue: 'someValue' }) class UserService {}
# VueInjector
# app
тип:
Vue instance
Корневой экземпляр Vue, в который внедряется
injector
.
# provider
тип:
Provider
Провайдер, предоставляющий доступ к сервисам в виде объекта Provider.
# initComponent
Сигнатура:
initComponent(component: Component)
Внедрение в компонент указанных в свойстве providers
сервисов.
# get
Сигнатура:
get(service: InjectableConstructor)
Возвращает экземпляр запрашиваемого сервиса. Создает экземпляр, если его еще не существует, и внедряет его в корневой экземпляр Vue.
# Provider
Объект (Provider) регистрирует сервисы и предоставляет к ним доступ.
Объект Provider
иммутабелен. Каждая регистрация компонента будет создавать необходимые ему сервисы.
# app
тип:
Vue instance
Корневой экземпляр Vue, в который внедряется
injector
.
# services
тип:
Map<typeof InjectableConstructor, any>
Объект, который содержит пары ключ/значение подключенных сервисов. Если параметров нет, то значением будет пустой объект.
# initComponent
Сигнатура:
initComponent(component: Component)
Внедрение в компонент указанных в свойстве providers
сервисов.
# registerService
Сигнатура:
registerService(target: InjectedObject, name: string, Service: InjectableConstructor)
Внедрение сервиса в указаный объект. Возвращает экземпляр сервиса.
# get
Сигнатура:
get(service: InjectableConstructor)
Возвращает экземпляр запрашиваемого сервиса. Создает экземпляр, если его еще не существует, и внедряет его в корневой экземпляр Vue.
# Интеграция в компоненты
Для внедрении зависимости можно использовать два метода:
- используя свойство компонента
providers
- используя декоратор
@Service
import { Injectable, Inject } from '@scandltd/vue-injector'
@Injectable
class LogService {}
// Используя свойство `providers`
default {
providers: {
LogService
}
}
// Используя декоратор
@Component
class Component extends Vue {
@Inject(LogService) service;
}
# Внедряемые в компоненты свойства
Эти свойства внедряются в каждый дочерний компонент, передавая экземпляр DI в корневой экземпляр в качестве опции injector
.
this.$injector
Экземпляр инжектора.
this.< ServiceName >
Предоставляемые сервисы. Эти свойства только для чтения.