# Core
This is a small library that integrates controllers and services patterns to the application. The package provides three main elements: a Vueent
instance, abstract Controller
and Service
classes.
# Installation
TIP
This library has no Vue (opens new window) dependencies.
# Usage
WARNING
As of TypeScript 4.3, support of experimental decorators must be allowed by the following tsconfig.json
options:
{
"compilerOptions": {
// ...
"moduleResolution": "node",
"useDefineForClassFields": false,
"experimentalDecorators": true
}
}
First of all, you should create a module to append VueEnt
into your project. Use initVueent()
which returns an object with several bound functions.
If you want to use injection of subling controllers, you have to make your controllers persistent by setting the persistentControllers
VueEnt option:
initVueent({ persistentControllers: true });
After that, all controllers will not be removed from the VueEnt instance along with its route components.
# registerService
The registerService
function registers a service class into the service registry of a Vueent
instance.
# registerController
The registerController
function registers a controller class into the controller registry of a Vueent
instance.
# useVueent
The useVueent
function returns a lazy-initialized instance of the Vueent
class.
# useService
The useService
function returns a lazy-initialized instance of a registered service.
# useController
The useController
function returns a lazy-initialized instance of a registered controller.
# injectService
The injectService
decorator injects a lazy-initialized instance of a registered service into a class property.
# legacyInjectService
The legacyInjectService
experimental decorator injects a lazy-initialized instance of a registered service into a class property.
# injectController
The injectController
decorator injects a lazy-initialized instance of a registered controller into a class property.
# legacyInjectController
The legactInjectController
experimental decorator injects a lazy-initialized instance of a registered controller into a class property.
# Full example
You may create a Vueent
instance directly using useVueent
call, but it's not necessary, it will be created automatically after the first useController
or useService
call. onBeforeMount
, onMounted
, onBeforeUnmount
, onUnmounted
, onBeforeUpdate
, onUpdated
, onActivated
, and onDeactivated
hooks are automatically connected to init
, mounted
, reset
, destroy
, willUpdated
, updated
, activated
, and deactivated
methods of Controller.
DANGER
Do not use the following library provided functions directly: useVueent
, registerService
, registerController
, useService
, useController
, injectService
, injectController
. That functions have to be bound to a context which contains a Vueent
class instance. Use functions with the same names provided by the initVueent
function.
Let's write a simple example:
<!-- file: app.vue -->
<template>
<div>
<div>Started at: {{ timestamp }}</div>
<div>Button clicks: {{ counter }}</div>
<div>
<button type="button" @click="increment">Increment</button>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useController } from '@/vueent';
import AppController from './app';
function setup() {
// creating a controller instance with parameters.
const controller = useController(AppController, new Date().getTime());
const increment = () => controller.increment();
const counter = computed(() => controller.counter);
return {
timestamp: controller.date, // non-reactive value
counter,
increment
};
}
export default defineComponent({ setup });
</script>
← Reactive Introduction →