UNPKG

8.85 kBMarkdownView Raw
1<p align="center">
2
3 <img width="130" alt="vue-ls logo" src="https://cdn.rawgit.com/RobinCK/0ef39abfff9a44061cee5b2c072e892e/raw/e2b95a57825ac9b8e845609ff9fc5fdaae37b55a/logo.svg">
4
5</p>
6
7<p align="center">
8 <a href="https://opencollective.com/vue-ls" alt="Financial Contributors on Open Collective"><img src="https://opencollective.com/vue-ls/all/badge.svg?label=financial+contributors" /></a>
9 <a href="https://github.com/RobinCK/vue-ls"><img src="https://img.shields.io/badge/vuejs-1.x-brightgreen.svg?style=flat-square"></a>
10 <a href="https://github.com/RobinCK/vue-ls"><img src="https://img.shields.io/badge/vuejs-2.x-brightgreen.svg?style=flat-square"></a>
11 <a href="https://github.com/RobinCK/vue-ls"><img src="https://img.shields.io/badge/vuejs-3.x-brightgreen.svg?style=flat-square"></a>
12 <a href="https://coveralls.io/github/RobinCK/vue-ls?branch=master"><img src="https://img.shields.io/coveralls/RobinCK/vue-ls.svg?style=flat-square"></a>
13 <a href="http://inch-ci.org/github/RobinCK/vue-ls"><img src="https://inch-ci.org/github/RobinCK/vue-ls.svg?branch=master&style=flat-squar"></a>
14 <a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"></a>
15
16</p>
17
18<p align="center">
19 <a href="https://www.npmjs.com/package/vue-ls"><img src="https://img.shields.io/npm/dm/vue-ls.svg?style=flat-square"></a>
20 <a href="https://www.npmjs.com/package/vue-ls"><img src="https://img.shields.io/npm/v/vue-ls.svg?style=flat-square"></a>
21 <a href="https://cdnjs.com/libraries/vue-ls"><img src="https://img.shields.io/cdnjs/v/vue-ls.svg"></a>
22 <a href="https://github.com/RobinCK/vue-ls/blob/master/LICENSE"><img src="https://img.shields.io/npm/l/vue-ls.svg?style=flat-square"></a>
23
24</p>
25
26
27# vue-ls
28
29[![Greenkeeper badge](https://badges.greenkeeper.io/RobinCK/vue-ls.svg)](https://greenkeeper.io/)
30
31Vue plugin for work with local storage, session storage and memory storage from Vue context
32
33[![NPM](https://nodei.co/npm/vue-ls.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/vue-ls/)
34
35## jsFiddle Example
36
37[Vue 1.x](https://jsfiddle.net/Robin_ck/Lvb2ah5p/)
38
39[Vue 2.x](https://jsfiddle.net/Robin_ck/6x1akv1L/)
40
41## Install
42#### CDN
43
44Recommended: https://unpkg.com/vue-ls, which will reflect the latest version as soon as it is published to npm. You can also browse the source of the npm package at https://unpkg.com/vue-ls/
45
46Also available on <a href="https://cdn.jsdelivr.net/npm/vue-ls@latest">jsDelivr</a> or <a href="https://cdnjs.com/libraries/vue-ls">cdnjs<a/>, but these two services take some time to sync so the latest release may not be available yet.
47
48#### NPM
49
50``` bash
51npm install vue-ls --save
52```
53
54#### Yarn
55
56``` bash
57yarn add vue-ls
58```
59
60#### Bower
61
62``` bash
63bower install vue-ls --save
64```
65
66## Development Setup
67
68``` bash
69# install dependencies
70npm install
71
72# build dist files
73npm run build
74```
75
76## Usage
77
78Vue storage API.
79
80``` js
81import Storage from 'vue-ls';
82
83options = {
84 namespace: 'vuejs__', // key prefix
85 name: 'ls', // name variable Vue.[ls] or this.[$ls],
86 storage: 'local', // storage name session, local, memory
87};
88
89Vue.use(Storage, options);
90
91//or
92//Vue.use(Storage);
93
94new Vue({
95 el: '#app',
96 mounted: function() {
97 Vue.ls.set('foo', 'boo');
98 //Set expire for item
99 Vue.ls.set('foo', 'boo', 60 * 60 * 1000); //expiry 1 hour
100 Vue.ls.get('foo');
101 Vue.ls.get('boo', 10); //if not set boo returned default 10
102
103 let callback = (val, oldVal, uri) => {
104 console.log('localStorage change', val);
105 }
106
107 Vue.ls.on('foo', callback) //watch change foo key and triggered callback
108 Vue.ls.off('foo', callback) //unwatch
109
110 Vue.ls.remove('foo');
111 }
112});
113```
114
115#### Global
116
117- `Vue.ls`
118
119#### Context
120- `this.$ls`
121
122## API
123
124#### `Vue.ls.get(name, def)`
125
126Returns value under `name` in storage. Internally parses the value from JSON before returning it.
127
128- `def`: default null, returned if not set `name`.
129
130#### `Vue.ls.set(name, value, expire)`
131
132Persists `value` under `name` in storage. Internally converts the `value` to JSON.
133
134- `expire`: default null, life time in milliseconds `name`
135
136#### `Vue.ls.remove(name)`
137
138Removes `name` from storage. Returns `true` if the property was successfully deleted, and `false` otherwise.
139
140#### `Vue.ls.clear()`
141
142Clears storage.
143
144#### `Vue.ls.on(name, callback)`
145
146Listen for changes persisted against `name` on other tabs. Triggers `callback` when a change occurs, passing the following arguments.
147
148- `newValue`: the current value for `name` in storage, parsed from the persisted JSON
149- `oldValue`: the old value for `name` in storage, parsed from the persisted JSON
150- `url`: the url for the tab where the modification came from
151
152#### `Vue.ls.off(name, callback)`
153
154Removes a listener previously attached with `Vue.ls.on(name, callback)`.
155
156## Testing
157
158- `npm run test` - run unit test
159- `npm run test:browserstack` - run browser test
160 - `npm run test:browserstack:chrome`
161 - `npm run test:browserstack:ie`
162 - `npm run test:browserstack:edge`
163 - `npm run test:browserstack:firefox`
164 - `npm run test:browserstack:safari`
165- `npm run test:chrome` - run browser test in chrome
166
167Testing Supported By<br>
168<img width="200" src="https://cdn.rawgit.com/RobinCK/b1435c9cae05437ad9e4c2023aec08e4/raw/4b89e95cd89827935e6e3949d28a4f6ea3e48ee4/browser-stack.svg">
169
170## Note
171Some browsers don't support the storage event, and most of the browsers that do support it will only call it when the storage is changed by a different window. So, open your page up in two windows. Click the links in one window and you will probably see the event in the other.
172
173The assumption is that your page will already know all interactions with localStorage in its own window and only needs notification when a different window changes things. This, of course, is a foolish assumption. But.
174
175## Other my Vue JS plugins
176
177| Project | Status | Description |
178|---------|--------|-------------|
179| [vue-gallery](https://github.com/RobinCK/vue-gallery) | ![npm](https://img.shields.io/npm/v/vue-gallery.svg) | VueJS responsive and customizable image and video gallery |
180| [vue-popper](https://github.com/RobinCK/vue-popper) | ![npm](https://img.shields.io/npm/v/vue-popperjs.svg) | VueJS popover component based on <a href="https://popper.js.org/">popper.js</a> |
181
182## Contributors
183
184### Code Contributors
185
186This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
187<a href="https://github.com/RobinCK/vue-ls/graphs/contributors"><img src="https://opencollective.com/vue-ls/contributors.svg?width=890&button=false" /></a>
188
189### Financial Contributors
190
191Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/vue-ls/contribute)]
192
193#### Individuals
194
195<a href="https://opencollective.com/vue-ls"><img src="https://opencollective.com/vue-ls/individuals.svg?width=890"></a>
196
197#### Organizations
198
199Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/vue-ls/contribute)]
200
201<a href="https://opencollective.com/vue-ls/organization/0/website"><img src="https://opencollective.com/vue-ls/organization/0/avatar.svg"></a>
202<a href="https://opencollective.com/vue-ls/organization/1/website"><img src="https://opencollective.com/vue-ls/organization/1/avatar.svg"></a>
203<a href="https://opencollective.com/vue-ls/organization/2/website"><img src="https://opencollective.com/vue-ls/organization/2/avatar.svg"></a>
204<a href="https://opencollective.com/vue-ls/organization/3/website"><img src="https://opencollective.com/vue-ls/organization/3/avatar.svg"></a>
205<a href="https://opencollective.com/vue-ls/organization/4/website"><img src="https://opencollective.com/vue-ls/organization/4/avatar.svg"></a>
206<a href="https://opencollective.com/vue-ls/organization/5/website"><img src="https://opencollective.com/vue-ls/organization/5/avatar.svg"></a>
207<a href="https://opencollective.com/vue-ls/organization/6/website"><img src="https://opencollective.com/vue-ls/organization/6/avatar.svg"></a>
208<a href="https://opencollective.com/vue-ls/organization/7/website"><img src="https://opencollective.com/vue-ls/organization/7/avatar.svg"></a>
209<a href="https://opencollective.com/vue-ls/organization/8/website"><img src="https://opencollective.com/vue-ls/organization/8/avatar.svg"></a>
210<a href="https://opencollective.com/vue-ls/organization/9/website"><img src="https://opencollective.com/vue-ls/organization/9/avatar.svg"></a>
211
212## License
213[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FRobinCK%2Fvue-ls.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FRobinCK%2Fvue-ls?ref=badge_large)
214
215MIT © [Igor Ognichenko](https://github.com/RobinCK)