/**
* @param options[object]
* global[boolean] 模块是否注入 nitaProvide 对象下,默认 false 不注入
* local[array] 需要缓存在 localStorage 中的状态
* session[array] 需要缓存在 sessionStorage 中的状态
* data[object] 状态属性,即使用 provide 需要声明的状态
* */
<script>
import nitaProvide from 'nata-provide'
const state = {
global: true, // true 则将 homeState 注入到 nitaProvide 对象下
local: [
'homeState.number',
],
session: [
'homeState.show',
'homeState.count',
],
data: {
homeState: {
show: false,
number: 1,
count: {
number: 10,
},
addNumber() {
// 注意,这里的this不是指向vue实例,指向的是 state.data.homeState
// 因为没有脱离引用关系,所以直接赋值也是双向绑定的
// 如果需要实例的this,可以在调用方法时传参
this.number++
}
}
}
}
// vue instance
export default {
name: 'HomeView',
mixins: [nitaProvide(state)],
mounted() {
console.log(nitaProvide.homeState);
},
...
}
</script>
const state = {
global: true, // true 则将 appState 注入到 nitaProvide 对象下
local: [],
session: [],
data: {
appState: {
...
}
}
}
new Vue({
router,
render: h => h(App),
mixins: [nitaProvide(state)],
}).$mount('#app')
import nitaProvide from 'nita-provide'
console.log(nitaProvide.appState)
如下面示例中 appState.userInfo,如果之前缓存了 name age sex 三个属性。
而后更新,新增了 tel 字段,删除了 sex 字段。
则进入初始化之后,appState.userInfo 会同时包含 name age sex tel 字段。
这样设计的原因是,一些数据如 appState.userInfo 的开始值可能为空 {},如果以开始值的属性从缓存取值会失败。
而一般来说,多一些用不到的属性也并不会出什么问题。
const state = {
global: true,
local: [
'appState.userInfo'
],
session: [],
data: {
appState: {
userInfo: {
name: '张三',
age: 18,
sex: 1,
}
}
}
}
new Vue({
router,
render: h => h(App),
mixins: [nitaProvide(state)],
}).$mount('#app')