zoukankan      html  css  js  c++  java
  • 使用Vue.prototype在vue中注册和使用全局变量

    • 在main.js中添加一个变量到Vue.prototype
      Vue.prototype.$appName = 'My App'

    • 这样 $appName 就在所有的 Vue 实例中可用了,甚至在实例被创建之前就可以

    new Vue({
      beforeCreate: function () {
        console.log(this.$appName)
      }
    })
    
    • 每个组件都是一个vue实例,Vue.prototype加一个变量,只是给每个组件加了一个属性,这个属性的值并不具有全局性,比如以下例子:
      main.js
    import Vue from 'vue'
    import App from './App'
    import router from './router'
    import store from './store'
    
    Vue.config.productionTip = false
    Vue.prototype.$appName = 'main'
    
    /* eslint-disable no-new */
    new Vue({
        el: '#app',
        store,
        router,
        components: { App },
        template: '<App/>',
    
    })
    

    给所有组件注册了一个属性$appName,赋予初始值'main',所有组件都可以用它this.$appName访问此变量,如果组件中没有赋值,初始值都是'main'

    Test1.vue

    <template>
        <div>
             <div @click="changeName">change name</div>
             <div @click="gotoTest2">goto test2</div>
        </div>
    </template>
    <script>
    export default {
        methods:{
            changeName(){
                this.$appName = "test1"
            },
            gotoTest2(){
                this.$router.push({name:"Test2"})
            } 
        },
    }
    </script>
    
    
    

    Test2.vue

    <template>
        <div>
             <div>{{this.$appName}} in test2</div>
        </div>
    </template>
    

    点击Test1中的change name 再跳转Test2,Test2里面还是显示main in test2

    如果要实现全局变量的功能,需要把属性变为引用类型
    把Vue.prototype.$appName = 'main'改为Vue.prototype.$appName = { name: 'main' }
    后面使用Vue.prototype.$appName.name改变和引用相应的值
    这进入Test2后显示test1 in test2

    • 添加的变量名一般以$打头,以区分各个组件自己的成员变量
  • 相关阅读:
    转:同步、异步、阻塞和非阻塞
    转:回调函数
    转:同步/异步与阻塞/非阻塞的区别
    转:Socket在阻塞模式下的信息收发和文件接收
    转:直接用socket实现HTTP协议
    链接错误 LINK : fatal error LNK1104: 无法打开文件“XX.obj”
    转:MFC中常用类,宏,函数介绍
    转:线程同步技术剖析
    转:线程同步
    转:C++回调函数用法
  • 原文地址:https://www.cnblogs.com/cowboybusy/p/11507352.html
Copyright © 2011-2022 走看看