vue-mixin-decorator

Mixin decorators for Vue Component
77,603 55
Install
npm install vue-mixin-decorator
Latest Version:1.2.0
Vue:2
License:MIT
Last Updated:Feb 28, 2022
Links: GitHub  ·  npm
Maintainer: justrhysism

Vue Mixin Decorator

Build Status npm Greenkeeper badge semantic-release

This library fully depends on vue-class-component.

Most ideas and code are stolen borrowed from @HerringtonDarkholme and his av-ts project. Also from @JsonSong89's comment, who suggested that the idea should be extracted into a separate project which is why I've begrudgingly done so.

Project template shamelessly stolen from vue-property-decorator.

Best case scenario is this project/implementation/concept gets merged/provided into/by an officially supported project and this one can be deprecated.

License

MIT License

Install

npm install --save-dev vue-mixin-decorator

Usage

There are 2 decorators:

  • @Mixin
  • @Component

and an extension class:

  • Mixins

Note: @Mixin is @Component exported from vue-class-component.

Single Mixin

import Vue from 'vue';
import { Component, Mixin, Mixins } from 'vue-mixin-decorator';

@Mixin
class MyMixin extends Vue {
  created() {
    console.log('Mixin created()');
  }

  mixinMethod() {
    console.log('Mixin method called.');
  }
}

@Component
class MyComponent extends Mixins<MyMixin>(MyMixin) {
  created() {
    this.mixinMethod();
  }
}

Multiple Mixins

import Vue from 'vue';
import { Component, Mixin, Mixins } from 'vue-mixin-decorator';

@Mixin
class MyMixin extends Vue {
  created() {
    console.log('Mixin created()');
  }

  mixinMethod() {
    console.log('Mixin method called.');
  }
}

@Mixin
class MyOtherMixin extends Vue {
  created() {
    console.log('Other mixin created()');
  }

  otherMixinMethod() {
    console.log('Other mixin method called.');
  }
}

// Create an interface extending the mixins to provide
interface IMixinInterface extends MyMixin, MyOtherMixin {}

@Component
class MyComponent extends Mixins<IMixinInterface>(MyMixin, MyOtherMixin) {
  created() {
    this.mixinMethod();
    this.otherMixinMethod();
  }
}

See also

Related Packages

vue-property-decorator

property decorators for Vue Component

15,253,854 5,457
vue-class-decorator

property decorators for Vue Component

80,843 1
vue-typescript

Typescript decorators to make vue play nice with typescript

3,203 355
@fluendo/vue

Fluendo utils vue + typescript

836
@havunen/vue-property-decorator

property decorators for Vue Component

361 5,457

Version History

Version Released License
1.2.0 MIT
1.1.1 MIT
1.1.0 MIT
1.0.1 MIT
1.0.0 MIT