quickapp_快应用_全局数据

全局数据

有时在接口请求的某个数据需要在多个页面使用,此时有2个方法

  • [1] 将数据存储在本地—> 等价于浏览器的localStorage
  • [2] 将数据存储在数据缓存中 -> 等价于vue中的vuex
[1]本地数据存储
<template>
  <div class="wrapper">
    <text id='text' @click='setValue'>存储数据</text>
    <text id='text' @click='getValue'>获取数据</text>
  </div>
</template>

<script>
import storage from '@system.storage'
import prompt from '@system.prompt'
export default {
  setValue(){
    storage.set({
      key: 'test',
      value: '11111',
      success: function(data) {
        prompt.showToast({
          message: '存储成功'
        })
      },
      fail: function(data, code) {
        console.log(`handling fail, code = ${code}`)
      }
    })
  },
  getValue(){
    storage.get({
      key: 'test',
      success: function(data) {
        prompt.showToast({
          message: data
        })
      },
      fail: function(data, code) {
        console.log(`handling fail, code = ${code}`)
      }
    })
  }
}
</script>
[2] 数据缓存

将大部分页面都需要使用的数据存储在app.ux中,比如存储数据dataCache

data:{
 dataCache:{}
}
// (引用类型)一定要在onCreate初始化,在data中设置的默认值不起作用(默认undefiend)
onCreate(){
  this.dataCache = {}
},

使用app.ux中声明方法去获取、修改、删除

//获取 app 缓存的数据
getAppCache (key) {
 return this.dataCache ? (this.dataCache[key] || '') : ''
},
// 设置 app 缓存的数据
setAppCache (key, val) {
 if (val === '' && this.dataCache[key]) {
   delete this.dataCache[key]
   return
 }
 this.dataCache[key] = val
},
clearAppCache () {
 this.dataCache = {}
}

在app.ux中声明的方法默认会被添加在$app身上,可以通过this.$app.方法名或者this. $app._def.方法名去获取

this.$app.setAppCache('type', 1111)
this.$app.getAppCache('type') // 1111
问题
// app.ux
data:{
  dataCache:{
    type: 0
  }
}
//获取 app 缓存的数据
getAppCache (key) {
  console.log(111111, this.dataCache) // 111111 undefiend
  return this.dataCache ? (this.dataCache[key] || '') : ''
},
// 设置 app 缓存的数据
setAppCache (key, val) {
  if (val === '' && this.dataCache[key]) {
    delete this.dataCache[key]
    return
  }
  this.dataCache[key] = val
},
clearAppCache () {
  this.dataCache = {}
}
// 其他页面
console.log(this.$app.getAppCache('type')) // ‘’

疑问🤔️: 在data中定义的初始值不起作用?!!!

在onCreate生命周期中再将数据初始化一边

onCreate(){
  this.dataCache = {}
},

此时再次调用this.$app.getAppCache(‘type’),此时可以正常获取了。
总结在data中数据的初始化不起作用,默认都是undefined!!!

全局方法

在项目中封装的一些工具型方法,可以将其添加在全局对象global中,这样就可以在页面中直接使用(不需每次使用之前先引入)。

global对象

在快应用中不能使用BOM、DOM,因此也不能使用window作为全局对象。

在快应用中可以使用global访问全局对象
在这里插入图片描述

在快应用中global对象可以直接使用,我们可以将封装的公共方法添加在global对象上(类似于将封装的公共方法添加在vue实例化对象上)。

  • utils文件
    // 公共方法文件
    export default {...}
    
  • 在app.ux中声明
    <script>
      const utils = require('./helper/utils').default
      /* @desc: 注入方法至全局 global,以便页面调用 */
      const hook2global = global.__proto__ || global
      hook2global.$utils = utils
    </script>
    
  • 在其他页面中使用
    $utils.getxxx()
    
$app

您可以在app.ux的< script >中引入一些公共的脚本,并暴露在当前 app 的对象上,然后就可以在页面 ux 文件的 ViewModel 中,通过this.$app.$def.xxx访问,如下

// 公共方法文件
export default {...}
//app.ux文件
<script>
//import utils from './helper/utils'
const utils = require('./helper/utils').default
export default{
 utils
}
</script>
// 其他ux页面
this.$app.$def.utils // 可以获取到处的公共对象

另外一些公用方法也可以直接声明在app.ux中,这些方法也可以通过this.$app.$def.方法名去使用, 也可以通过 this. $app.方法名直接使用!

常量数据

在实际开发过程中,若是存在一些常量且在项目的多个地方使用时,可以将该数据存储在manifest.json配置项的config.data中。

在使用时可以通过$app.$data去获取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值