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 | [](https://greenkeeper.io/)
|
30 |
|
31 | Vue plugin for work with local storage, session storage and memory storage from Vue context
|
32 |
|
33 | [](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 |
|
44 | Recommended: 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 |
|
46 | Also 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
|
51 | npm install vue-ls --save
|
52 | ```
|
53 |
|
54 | #### Yarn
|
55 |
|
56 | ``` bash
|
57 | yarn add vue-ls
|
58 | ```
|
59 |
|
60 | #### Bower
|
61 |
|
62 | ``` bash
|
63 | bower install vue-ls --save
|
64 | ```
|
65 |
|
66 | ## Development Setup
|
67 |
|
68 | ``` bash
|
69 | # install dependencies
|
70 | npm install
|
71 |
|
72 | # build dist files
|
73 | npm run build
|
74 | ```
|
75 |
|
76 | ## Usage
|
77 |
|
78 | Vue storage API.
|
79 |
|
80 | ``` js
|
81 | import Storage from 'vue-ls';
|
82 |
|
83 | const 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 |
|
89 | Vue.use(Storage, options);
|
90 |
|
91 | //or
|
92 | //Vue.use(Storage);
|
93 |
|
94 | new 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 | Use in js file
|
115 | ``` js
|
116 | // localStore.js
|
117 | import Storage from 'vue-ls';
|
118 | const 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 |
|
124 | const { ls } = Storage.useStorage(options)
|
125 |
|
126 | export default ls
|
127 |
|
128 | // somefile.js
|
129 | import ls from 'localStore.js';
|
130 |
|
131 | ls.set('foo', 'boo');
|
132 | ls.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 |
|
146 | Returns 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 |
|
152 | Persists `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 |
|
158 | Removes `name` from storage. Returns `true` if the property was successfully deleted, and `false` otherwise.
|
159 |
|
160 | #### `Vue.ls.clear()`
|
161 |
|
162 | Clears storage.
|
163 |
|
164 | #### `Vue.ls.on(name, callback)`
|
165 |
|
166 | Listen 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 |
|
174 | Removes 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 |
|
187 | Testing Supported By<br>
|
188 | <img width="200" src="https://cdn.rawgit.com/RobinCK/b1435c9cae05437ad9e4c2023aec08e4/raw/4b89e95cd89827935e6e3949d28a4f6ea3e48ee4/browser-stack.svg">
|
189 |
|
190 | ## Note
|
191 | Some 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 |
|
193 | The 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) |  | VueJS responsive and customizable image and video gallery |
|
200 | | [vue-popper](https://github.com/RobinCK/vue-popper) |  | VueJS popover component based on <a href="https://popper.js.org/">popper.js</a> |
|
201 |
|
202 | ## Contributors
|
203 |
|
204 | ### Code Contributors
|
205 |
|
206 | This 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 |
|
211 | Become 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 |
|
219 | Support 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 | [](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FRobinCK%2Fvue-ls?ref=badge_large)
|
234 |
|
235 | MIT © [Igor Ognichenko](https://github.com/RobinCK)
|