Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 1x 1x 1x 32x 8x 16x 8x 8x 8x 3x 5x 10x 5x 5x 5x 8x 16x 8x 8x 2x 2x 1x 1x 7x 7x 7x 7x 6x | import { Vue, VueConstructor, Option } from './interfaces'
import { set, copy } from './objpath'
import { localStorage } from './drivers'
import defaultMerge from './merge'
function applyPersistence(vm, option: Option) {
const { keys, merge = defaultMerge, namespace: ns, driver = localStorage } = option
let originaldata = {}
for (const k of keys) {
copy(originaldata, vm, k)
}
let data = null
if (driver.has(ns)) {
data = driver.get(ns)
} else {
const tmp = {}
for (const k of keys) {
copy(tmp, originaldata, k)
}
data = tmp
driver.set(ns, data)
}
data = merge(originaldata, data)
for (const k of keys) {
copy(vm, data, k)
vm.$watch(k, {
handler: value => {
set(data, k, value)
driver.set(ns, data)
},
deep: true
})
}
}
export function install(Vue: VueConstructor) {
Vue.mixin({
created() {
Eif ('storage' in this.$options) {
const option: Option | Option[] = this.$options.storage
if (Array.isArray(option)) option.forEach(opt => applyPersistence(this, opt))
else applyPersistence(this, option)
}
}
})
}
|