Code Monkey home page Code Monkey logo

vue-ya-stash's Introduction

vue-ya-stash CircleCI

Yet Another simple stash storage for Vue

TL;DR

npm install vue-ya-stash
export default {
  stash: ['user', 'ui'],
  mounted () {
    console.log('this.user.name')
    this.$emit('update:user', {...this.user, name: 'Bob'})
    this.$emit('patch:ui', 'sidebar.visible', true )
  }
}  

BOOYAH

Design Goals

  1. Not too complicated
  2. Not too simple
  3. Try to keep the standard pattern (props-emit)

#3 is being specially concerned. As you see from example, one can effortlessly switch between props-emit and stash model. Furthermore ways of universal components for two models will be supported. I wish :)

Usage

Install

npm install --save vue-ya-stash

Setup

import Vue from 'vue'
import stashStore from './stash'

new Vue({
  el: '#app',
  router,
  stashStore,
  template: '<App/>',
  components: { App }
})

./stash/index.js

import Vue from 'vue'
import VueYaStash from 'vue-ya-stash'

Vue.use(VueYaStash)

var stash = {
  user: {
    name: 'Ted',
    email: '[email protected]'
  },
  ui: {
    sidebar: {
      visible: true
    }
  }
}

var stashContainer = new Vue({
  data: {
    stash: stash
  }
})

export default stashContainer.stash

Component

Vue.component('user-card', {
    stash: ['user', 'ui'],
    created () {
      // Access
      console.log(this.user.name)
      // Update
      this.$emit('update:user', {...this.user, name: 'Bob'})
      // Patch
      this.$emit('patch:user', 'name', 'Bob')
    }
});
Vue.component('user-card', {
    stash: {
      name: 'user.name',
      sidebar: 'ui.sidebar'
    }
    created () {
      // Access
      console.log(this.name)
      console.log(this.sidebar.visible)
      // Update
      this.$emit('update:name', 'Bob')
      this.$emit('update:sidebar', {...this.sidebar, visible: true})
      // Patch
      this.$emit('patch:sidebar', 'visible', true)
    }
});

Patch

To update parts of stash, one can use patch instead of update

this.$emit('patch:key', path_string, update_value)

For example after you mounted stash.ui from above, you can change stash.ui.sidebar.visible with patch

Vue.component('nav-bar', {
  stash: ['ui']
  methods: {
    toggleSidebar () {
      this.$emit('patch:ui', 'sidebar.visible', !ui.sidebar.visible)
    }
  }
}

A path string can cover dot(.) references and also square brackets('[]').

this.$emit('patch:ui', 'sidebar.menu[4].content', 'new value')

Path strings should be same as what one does with real javascript syntex.

You can't do

this.$emit('patch:menu', 1, 'new value')

But you should do

this.$eimt(`patch:menu', '[1]', 'new value')

The path parser will throw errors in advance.

computed stash

Stash properties can be a computed function which is Read Only. With function forms, update:foo or patch:foo won't be generated in automatic manner, however I wish we will see set option soon.

stash: {
  name: stash => stash.user.name.toUpperCase()
}

vue-ya-stash's People

Contributors

qgp9 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.