UNPKG

9.25 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
83const options = {
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```
114Use in js file
115``` js
116// localStore.js
117import Storage from 'vue-ls';
118const options = {
119 namespace: 'vuejs__', // key prefix
120 name: 'ls', // name variable Vue.[ls] or this.[$ls],
121 storage: 'local', // storage name session, local, memory
122};
123
124const { ls } = Storage.useStorage(options)
125
126export default ls
127
128// somefile.js
129import ls from 'localStore.js';
130
131ls.set('foo', 'boo');
132ls.get('foo');
133```
134
135#### Global
136
137- `Vue.ls`
138
139#### Context
140- `this.$ls`
141
142## API
143
144#### `Vue.ls.get(name, def)`
145
146Returns value under `name` in storage. Internally parses the value from JSON before returning it.
147
148- `def`: default null, returned if not set `name`.
149
150#### `Vue.ls.set(name, value, expire)`
151
152Persists `value` under `name` in storage. Internally converts the `value` to JSON.
153
154- `expire`: default null, life time in milliseconds `name`
155
156#### `Vue.ls.remove(name)`
157
158Removes `name` from storage. Returns `true` if the property was successfully deleted, and `false` otherwise.
159
160#### `Vue.ls.clear()`
161
162Clears storage.
163
164#### `Vue.ls.on(name, callback)`
165
166Listen for changes persisted against `name` on other tabs. Triggers `callback` when a change occurs, passing the following arguments.
167
168- `newValue`: the current value for `name` in storage, parsed from the persisted JSON
169- `oldValue`: the old value for `name` in storage, parsed from the persisted JSON
170- `url`: the url for the tab where the modification came from
171
172#### `Vue.ls.off(name, callback)`
173
174Removes a listener previously attached with `Vue.ls.on(name, callback)`.
175
176## Testing
177
178- `npm run test` - run unit test
179- `npm run test:browserstack` - run browser test
180 - `npm run test:browserstack:chrome`
181 - `npm run test:browserstack:ie`
182 - `npm run test:browserstack:edge`
183 - `npm run test:browserstack:firefox`
184 - `npm run test:browserstack:safari`
185- `npm run test:chrome` - run browser test in chrome
186
187Testing Supported By<br>
188<img width="200" src="https://cdn.rawgit.com/RobinCK/b1435c9cae05437ad9e4c2023aec08e4/raw/4b89e95cd89827935e6e3949d28a4f6ea3e48ee4/browser-stack.svg">
189
190## Note
191Some 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.
192
193The 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.
194
195## Other my Vue JS plugins
196
197| Project | Status | Description |
198|---------|--------|-------------|
199| [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 |
200| [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> |
201
202## Contributors
203
204### Code Contributors
205
206This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
207<a href="https://github.com/RobinCK/vue-ls/graphs/contributors"><img src="https://opencollective.com/vue-ls/contributors.svg?width=890&button=false" /></a>
208
209### Financial Contributors
210
211Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/vue-ls/contribute)]
212
213#### Individuals
214
215<a href="https://opencollective.com/vue-ls"><img src="https://opencollective.com/vue-ls/individuals.svg?width=890"></a>
216
217#### Organizations
218
219Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/vue-ls/contribute)]
220
221<a href="https://opencollective.com/vue-ls/organization/0/website"><img src="https://opencollective.com/vue-ls/organization/0/avatar.svg"></a>
222<a href="https://opencollective.com/vue-ls/organization/1/website"><img src="https://opencollective.com/vue-ls/organization/1/avatar.svg"></a>
223<a href="https://opencollective.com/vue-ls/organization/2/website"><img src="https://opencollective.com/vue-ls/organization/2/avatar.svg"></a>
224<a href="https://opencollective.com/vue-ls/organization/3/website"><img src="https://opencollective.com/vue-ls/organization/3/avatar.svg"></a>
225<a href="https://opencollective.com/vue-ls/organization/4/website"><img src="https://opencollective.com/vue-ls/organization/4/avatar.svg"></a>
226<a href="https://opencollective.com/vue-ls/organization/5/website"><img src="https://opencollective.com/vue-ls/organization/5/avatar.svg"></a>
227<a href="https://opencollective.com/vue-ls/organization/6/website"><img src="https://opencollective.com/vue-ls/organization/6/avatar.svg"></a>
228<a href="https://opencollective.com/vue-ls/organization/7/website"><img src="https://opencollective.com/vue-ls/organization/7/avatar.svg"></a>
229<a href="https://opencollective.com/vue-ls/organization/8/website"><img src="https://opencollective.com/vue-ls/organization/8/avatar.svg"></a>
230<a href="https://opencollective.com/vue-ls/organization/9/website"><img src="https://opencollective.com/vue-ls/organization/9/avatar.svg"></a>
231
232## License
233[![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)
234
235MIT © [Igor Ognichenko](https://github.com/RobinCK)