🌱 Vue and vuex based library, writing less verbose code.
Install the pkg with npm:
npm install lue --save
or yarn
yarn add lue
// counter.js
export default {
namespace: 'counter',
state: {
count: 0,
title: 'Counter'
},
actions: {
increase ({dispatch, state}, payload) {
const val = state.count + 1;
// should be return a object to update state
// if return undefined or not a object, state won't be updated
return {
count: val
};
},
decrease ({dispatch, state}, payload) {
const val = state.count - 1;
return {
count: val
};
}
}
};
// modules/index.js
import counter from 'path/to/counter';
import other from 'path/to/other';
export default {
counter,
other
};
// options/index.js
const App = () => import(/* webpackChunkName: "app" */ 'path/to/app/index.vue');
const Counter = () => import(/* webpackChunkName: "counter" */ 'path/to/counter/index');
const Outer = { template: '<router-view></router-view>' };
export default {
mode: 'history',
routes: [
{
path: '/',
component: Outer,
children: [
{ path: '', component: App },
{ path: 'counter', component: Counter },
// other config
]
}
]
}
import Vue from 'vue';
// path/to/index.js
import Lue from 'lue';
import modules from 'path/to/modules/index';
import routerOptions from 'path/to/options/index';
import filters from 'path/to/filter/index';
// 1. install plugin
Vue.use(Lue);
// 2. new a lue instance
const app = new Lue();
// 3. create store
app.createStore(modules);
// 4. init router
app.initRouter(routerOptions);
// 5. start your application
app.start('#app', {
// optional options object
filters,
// env/vue-i18n.etc
});
<template>
<div class="counter">
<h3>{{title}}:</h3>
<div>
<span class="decrease" @click="sub">-</span>
<span>{{count}}</span>
<span class="increase" @click="add">+</span>
</div>
</div>
</template>
<script>
import { mergeActions, mergeProps } from 'lue';
export default {
computed: {
...mergeProps(['counter.count', 'counter.title'])
// or
// ...mergeProps({
// test: 'counter.title',
// })
},
methods: {
...mergeActions(['counter.increase', 'counter.decrease']),
add () {
this.increase();
},
sub () {
this.decrease();
}
}
}
</script>
Vuex store instance.
Vue router instance.
Lue constructor options.
Create vuex store. See opts.
Init vue-router instance. See routerOptions
Start the app. See opts of creating a vue instance. el
is a css selector for document.querySelector
Running the examples:
npm install
npm run dev # serve examples at localhost:8000
MIT