zoukankan      html  css  js  c++  java
  • vue prototype

    每一个组件都相当于是Vue的一个实例 所以有时候我们定义数据或者实用工具的时候并不想污染全局 就可以在vue.prototype上进行定义 使得它们在每个组件实例里都可以访问
    Vue.prototype.$proName = 'pro_name'

      export default {
        data () {
          return {}
        },
        created () {
           console.log('this.$proName:',this.$proName) // this.$proName:pro_name
        }
      }
    

    至于为什么一定要用$,其实并没有什么特定的规则,只不过是Vue.prototype的一个小约定,也可以用其他符号代替,如Vue.prototype.^proName = 'pro_name'
    虽然没有什么特定规则,但不能舍弃不写,不然会和实例里定义的变量发生冲突:

    Vue.prototype.proName = 'pro_name'
    export default {
      data () {
        return {
          proName: '111'
        }
      },
      created () {
         console.log('prototype-proName:',this.proName) 
         console.log('page-proName:',this.proName) 
      }
    }
    

    上面的log会先打印出prototype-proName:pro_name然后出现page-proName:111,因为原型上的proName被实例data里面的proName覆盖掉了
    所以用符号也可以称之作用域
    值得注意的是一点是 Vue.prototype只是给每个组件加了一个变量 但它并不是全局的

    index.vue
    <tempalte>
      <div class="page_index">
         <el-button @click="toHomePage">toHomePage Button</el-button>
      </div>
    </tempalte>
    <script>
    export default {
      data () {
        return {}
      },
      methods: {
        toHomePage() {
          this.$proName = "change_pro_name"
          this.$route.push('/home')
        }
      }
    }
    </script>
    
    home.vue
    <script>
    export default {
      data () {
        return {}
      },
      created() {
        console.log(this.$proName) // pro_name
      }
    }
    </script>
    

    如果实在想要实现全局功能,可以把值写成对象格式
    Vue.prototype.&proName = { name: pro_name1 }
    这样重复上述点击事件跳转以后home页面log的值就是index页面更改的值

    通常来说原型可以获得实例里面的所有东西,也就是说可以通过this访问任何定义在实例上的东西
    比如我们先在原型上定义一个方法,用该方法去访问实例里面定义的变量进行操作

    Vue.prototype.$reverseText = function (txt) {
       this.txt = this.txt.split('').reverse().join('')
     }
    
    // 组件
    <script>
    export default {
      data () {
        return {
          txt: 'hello'
        }
      },
      created () {
        console.log(this.$reverseText(this.txt)) // olleh
      } 
    }
    </script>
    

    最直观的原型方法就是我们常用的$axios

    // mian.js
    Vue.prototype.$axios = axios
    
    // 组件
    this.$axios({
      method: 'post',
      url: url,
      data: data
    }).then((response) =>{
      console.log(response) //请求成功返回的数据
    }).catch((error) =>{
      console.log(error) //请求失败返回的数据
    })
    
  • 相关阅读:
    快速幂 笔记与思路整理
    倍增法求最近公共祖先 笔记与思路整理
    Dijkstra算法 笔记与思路整理
    appium搭建环境过程 ---新手总结(大牛勿喷,新手互相交流)
    selenium 学习笔记 ---新手学习记录(10) 问题总结(java)--poi--excel 操作
    selenium 学习笔记 ---新手学习记录(9) 问题总结(java)
    selenium 学习笔记 ---新手学习记录(8) 问题总结(java)
    selenium 学习笔记 ---新手学习记录(7) 问题总结(java)
    时间函数
    os 模块
  • 原文地址:https://www.cnblogs.com/kaizhadiyishuai/p/15740452.html
Copyright © 2011-2022 走看看