Please consider using nuxt-property-decorator instead.
ES and Typescript Class Components Decorators for Nuxt.js extending vue-class-component
npm install --save nuxt-class-component
# or
yarn add nuxt-class-component
npm install --save-dev babel-plugin-transform-decorators-legacy babel-plugin-transform-class-properties
# or
yarn add --dev babel-plugin-transform-decorators-legacy babel-plugin-transform-class-properties
Then you can configure Babel plugins on nuxt.config.js
- Plugin order is important (see here):
module.exports = {
build: {
babel: {
plugins: ['transform-decorators-legacy', 'transform-class-properties']
}
}
}
You will need to enable [experimentalDecorators
] on your Typescript compiler.(http://www.typescriptlang.org/docs/handbook/decorators.html).
Using Typescript Compiler argument --experimentalDecorators
like this:
tsc --experimentalDecorators
Using tsconfig.json
:
{
"compilerOptions": {
"experimentalDecorators": true,
...
}
}
See vue-class-component, vuex-class documentation.
You can also see the official TypeScript examples of Nuxt.js.
import Vue from 'vue'
import Component from 'nuxt-class-component'
import {
State,
Getter,
Action,
Mutation,
namespace
} from 'vuex-class'
const Module = namespace('path/to/module')
@Component({
props: {
propMessage: String
}
})
export class MyComp extends Vue {
@State('foo') stateFoo
@State(state => state.bar) stateBar
@Getter('foo') getterFoo
@Action('foo') actionFoo
@Mutation('foo') mutationFoo
@Module.Getter('foo') moduleGetterFoo
@Module.Action('foo') moduleActionFoo
// If the argument is omitted, use the property name
// for each state/getter/action/mutation type
@State foo
@Getter bar
@Action baz
@Mutation qux
// initial data
msg = 123
// use prop values for initial data
helloMsg = 'Hello, ' + this.propMessage
// lifecycle hooks
created () {
this.stateFoo // -> store.state.foo
this.stateBar // -> store.state.bar
this.getterFoo // -> store.getters.foo
this.actionFoo({ value: true }) // -> store.dispatch('foo', { value: true })
this.mutationFoo({ value: true }) // -> store.commit('foo', { value: true })
this.moduleGetterFoo // -> store.getters['path/to/module/foo']
}
mounted () {
this.greet()
}
fetch () {
// fetch data
}
async asyncData () {
// async fetching data
}
// computed
get computedMsg () {
return 'computed ' + this.msg
}
// method
greet () {
alert('greeting: ' + this.msg)
}
}
MIT License - Copyright (c) Nuxt Community