美文网首页简明uniapp教程uin-app
uni-app 全局变量的实现方式

uni-app 全局变量的实现方式

作者: 瑟闻风倾 | 来源:发表于2019-12-27 14:01 被阅读0次

说明:.vue.nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。

1. 自定义公用模块

定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。
优缺点:这种方式维护起来比较方便,但是缺点就是每次都需要引入。
注意:这种方式只支持多个vue页面或多个nvue页面之间公用,vue和nvue之间不公用。如果希望 .vue 和 .nvue 复用一些方法的话,需要采用公用模块的方案,分别在 .vue 和 .nvue 文件中引入。

示例如下

  • 定义公用模块:在 uni-app 项目根目录下创建 common 目录,然后在 common 目录下新建 helper.js 用于定义公用的属性或方法。
const apiUrl = "http://www.hcoder.net";
const now = Date.now || function () {  
    return new Date().getTime();  
};  
const isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};  
const sayHi = function(){
 console.log('hi');
}

export default {  
    apiUrl,  
    now,  
    isArray,  
    sayHi   
}
  • 在test.vue 中引用该模块
<template>
    <view>
        当前时间戳:{{time}}
    </view>
</template>

<script>
import helper from "../../../common/helper.js"
export default {
    data() {
        return {
            time:""
        }
    },
    methods: {
        
    },
    onLoad:function(){
        helper.sayHi();
        console.log("now:" + helper.now());
        this.time = helper.now();
    }
}
</script>

<style>

</style>

2. 挂载 Vue.prototype

将一些使用频率较高的常量或者方法,直接扩展到 Vue.prototype 上,每个 Vue 对象都会“继承”下来。
优点:只需要在 main.js 中定义好即可在每个页面中直接调用。
注意:Vue 上挂载属性的方式只支持vue页面,不能在 nvue页面中使用。

示例如下

  • 在 main.js 中挂载属性/方法
Vue.prototype.apiUrl = 'http://uniapp.dcloud.io';  
Vue.prototype.now = Date.now || function () {  
    return new Date().getTime();  
};  
Vue.prototype.isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};
Vue.prototype.dosomething = function(){
 console.log('do....');
}
  • 在test.vue 中调用
<template>
    <view>
        当前时间戳:{{time}}
    </view>
</template>

<script>
export default {
    data() {
        return {
            time:""
        }
    },
    methods: {
        
    },
    onLoad:function(){
        this.dosomething();
        console.log("now:" + this.now());
        this.time = this.now();
    }
}
</script>

<style>

</style>

建议:

  • 每个页面中不要再出现和全局变量(或方法)相同的属性名(或方法名)。
  • 在 Vue.prototype 上挂载的属性或方法,可以加一个统一的前缀。比如 $url、global_url 这样,在阅读代码时也容易与当前页面的内容区分开。

3. globalData

小程序有globalData机制,这套机制在uni-app里也可以使用,全端通用。
在App.vue文件里定义globalData(也可以使用 API 读写这个值),然后可在globalData中定义全局变量。
优点:globalData 是一种比较简单的全局变量使用方式。globalData 支持 vue 和 nvue 共享数据。

示例如下

  • 在 App.vue 中声明全局变量
<script>  
    export default {  
        globalData: {  
            name: 'liy'  
        },  
        onLaunch: function() {  
            console.log('App Launch')  
        },  
        onShow: function() {  
            console.log('App Show')  
        },  
        onHide: function() {  
            console.log('App Hide')  
        }  
    }  
</script>  

<style>  
    /*每个页面公共css */  
</style>  
  • 为全局变量赋值
getApp().globalData.name= 'yang'//赋值
  • 获取全局变量的值
console.log(getApp().globalData.name) //取值

如果需要把 globalData 的数据绑定到页面上,可在页面的onShow声明周期里进行变量重赋值。
实战拓展页面通讯 - 使用url传参或使用全局变量共享数据

4. Vuex

vue是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

示例如下
(1) 在根目录下创建 stroe/index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
const store = new Vuex.Store({
 state : {
  nickname : "未设置"
 },
 mutations : {
  change : function(state, nickname){
   state.nickname = nickname;
  }
 }
});
export default store

(2) 在main.js中挂在Vuex

import store from './store'
Vue.prototype.$store = store;

(3) 在test.vue 中调用

  • test.vue
<template>
 <view class="content">
  <text class="title">--{{nickname}}--</text>
  <button type="primary" @tap="openchange">改名</button>
 </view>
</template>
<script>
 import {
  mapState,
  mapMutations
 } from 'vuex';
 export default {
  data() {
   return {
   }
  },
  computed:{
   ...mapState(['nickname'])
  },
  methods:{
   openchange : function(){
    uni.navigateTo({
     url: '../change/change',
    });
   }
  }
 }
</script>
  • change.vue
<template>
 <view>
  <button type="primary" @tap="change">change</button>
 </view>
</template>
<script>
 import {
  mapState,
  mapMutations
 } from 'vuex';
 export default {
  methods:{
   change : function(){
    this.$store.commit('change', 'hi...')
   }
  }
 }
</script>

说明:使用 Vuex 保证了变量在全局的统一性,可以在实际开发中进行对应场景的应用。

相关文章

  • uni-app 实现全局变量的方式

    1. 公用模块 1.1)定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。在 uni-app 项...

  • uni-app 实现全局变量的方式

    1. 公用模块 1.1)定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。 在 uni-app ...

  • uni-app 全局变量的实现方式

    说明:.vue 和 .nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。 1. ...

  • angularjs设置全局变量的三种方式

    1.纯js方式 通过js方式实现设置全局变量 var a=q 2.通过angularjs value的方式 var...

  • Vue全局变量的实现方式

    创建js文件,添加需要使用的全局变量 1、全局变量模块导入方式 2、全局变量挂载到Vue.ptototype中

  • 多线程

    打印正在运行的多个线程 通过继承的方式实现线程 多线程共享全局变量 多线程共享全局变量 args参数 互斥锁 如果...

  • VUE 全局变量的几种实现方式

    1、全局变量专用模块意思是说,用一个模块(js or vue)管理这套全局变量,模块里的变量用export (最好...

  • VUE 全局变量的几种实现方式

    最近在学习VUE.js 中间涉及到JS全局变量,与其说是VUE的全局变量,不如说是模块化JS开发的全局变量。 1、...

  • Swift--单例

    Swift 1.2之前要实现单例,无非就是这三种方式:全局变量,内部变量和dispatch_once方式。但是1....

  • uni-app 创建

    创建 uni-app 有两种方式 快速搭建 uni-app 使用编译器HbuilderX 创建 使用 vue-cl...

网友评论

    本文标题:uni-app 全局变量的实现方式

    本文链接:https://www.haomeiwen.com/subject/fecdoctx.html