广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue中 Vue.prototype使用详解
  • 869
分享到

Vue中 Vue.prototype使用详解

2024-04-02 19:04:59 869人浏览 安东尼
摘要

目录1. 基本示例2. 为实例prototype设置作用域3. 注册和使用全局变量4. 原型方法的上下文5. 应用示例5.1 引入 axiOSVue.prototype、Vue.co

我们可能会在很多组件里用到数据/实用工具,但是不想污染全局作用域。这种情况下,可以通过在原型上定义它们使其在每个 Vue 的实例中可用。

1. 基本示例

在main.js中添加一个变量到 Vue.prototype


Vue.prototype.$appName = 'My App'

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


new Vue({
  beforeCreate: function () {
    console.log(this.$appName)
  }
})

控制台会打印出 My App,就这么简单!

2. 为实例prototype设置作用域

为什么 appName 要以 开头?这很重要吗?这里没有什么魔法。 开头? 这很重要吗? 这里没有什么魔法。开头?这很重要吗?这里没有什么魔法。 是在 Vue 所有实例中都可用的 property 的一个简单约定。这样做会避免和已被定义的数据、方法、计算属性产生冲突。
如果我们设置:


Vue.prototype.appName = 'My App'

那么如下的代码输出什么:


new Vue({
  data: {
    // 啊哦,`appName` 也是一个我们定义的实例 property 名!
    appName: 'The name of some other app'
  },
  beforeCreate: function () {
    console.log(this.appName)
  },
  created: function () {
    console.log(this.appName)
  }
})

日志中会先出现 "My App",然后出现 "The name of some other app",因为 this.appName 在实例被创建之后被 data 覆写了。我们通过 为实例property设置作用域来避免这种事情发生。你还可以根据你的喜好使用自己的约定,诸如为实例 property 设置作用域来避免这种事情发生。 你还可以根据你的喜好使用自己的约定,诸如为实例property设置作用域来避免这种事情发生。你还可以根据你的喜好使用自己的约定,诸如_appName 或 ΩappName,来避免和插件或未来的插件相冲突。

3. 注册和使用全局变量

每个组件都是一个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'

new Vue({
    el: '#app',
    store,
    router,
    components: { App },
    template: '<App/>',
})

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

// home.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('/about')
    } 
  }
}
</script>

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

点击 home 中的 change name 再跳转about,about里面还是显示 main in test2
如果要实现全局变量的功能,需要把属性变为引用类型


Vue.prototype.$appName = { name: 'main' }

后面使用 this.$appName.name 改变和引用相应的值
这进入 about 后显示 test1 in test2

4. 原型方法的上下文

javascript 中一个原型的方法会获得该实例的上下文,也就是说可以使用 this 访问:数据、计算属性、方法或其它任何定义在实例上的东西。
让我们将其用在一个名为 $reverseText 的方法上:


 // main.js
Vue.prototype.$reverseText = function (propertyName) {
  this[propertyName] = this[propertyName]
    .split('')
    .reverse()
    .join('')
}

// 相应组件
<script>
export default {
  data() {
    return{
      message: 'Hello'
    }
  },
  created() {
    console.log(this.message) // => "Hello"
    this.$reverseText('message')
    console.log(this.message) // => "olleH"
  }
}
</script>

5. 应用示例

5.1 引入 axios


npm install vue-axios --save

npm install qs.js --save  //它的作用是能把JSON格式的直接转成data所需的格式


// mian.js
import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'

Vue.prototype.$axios = axios    //全局注册,使用方法为:this.$axios
Vue.prototype.qs = qs           //全局注册,使用方法为:this.qs

// 相应组件
<script>
  export default{
    data(){
      return{
        userId:666,         
        token:'',
      }
    },
    created(){
      this.$axios({
        method:'post',
        url:'api',
        data:this.qs.stringify({    //这里是发送给后台的数据
          userId:this.userId,
          token:this.token,
        })
      }).then((response) =>{          //这里使用了es6的语法
        console.log(response)       //请求成功返回的数据
      }).catch((error) =>{
        console.log(error)       //请求失败返回的数据
      })
    }
  }
</script>

Vue.prototype、Vue.component和Vue.use区别

1、Vue.prototype

在多个地方都需要使用但不想污染全局作用域的情况下,这样定义,在每个 Vue 实例中都可用。
参考:https://cn.vuejs.org/v2/cookbook/adding-instance-properties.html
$ 表示这是一个在 Vue 所有实例中都可用的属性
常用于方法、变量等


import echarts from 'echarts'
Vue.prototype.$echarts = echarts 


2、vue.component

全局注册组件,
第一个参数是调用组件时写的组件名
第二个参数是引入组件时写的名称
可用于注册自定义组件


import myLoading from 'base/loading'
Vue.component('myLoading',myLoading);

3、Vue.use

同样是全局注册,和component的区别是接收的参数必须有install方法
常用于注册第三方插件


import ElementUI from 'element-ui';
Vue.use(ElementUI);

到此这篇关于Vue中 Vue.prototype使用详解的文章就介绍到这了,更多相关Vue.prototype使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue中 Vue.prototype使用详解

本文链接: https://www.lsjlt.com/news/129819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue中 Vue.prototype使用详解
    目录1. 基本示例2. 为实例prototype设置作用域3. 注册和使用全局变量4. 原型方法的上下文5. 应用示例5.1 引入 axiosVue.prototype、Vue.co...
    99+
    2022-11-12
  • Vue中Vue.prototype如何用
    这篇文章主要讲解了“Vue中Vue.prototype如何用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue中Vue.prototype如何用”吧!1. 基本示例在main.js中添加一...
    99+
    2023-07-04
  • Vue中Vue.prototype怎么用
    这篇文章将为大家详细讲解有关Vue中Vue.prototype怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 基本示例在main.js中添加一个变量到 Vue.prototypeVue.prot...
    99+
    2023-06-20
  • Vue中bus的使用详解
    vue总线机制(bus) vue中非父子组件之间通信除了使用vuex,也可以通过bus总线,两者适用场景不同。 bus适合小项目、数据被更少组件使用的项目,对于中大型项目 数据在很多...
    99+
    2022-11-12
  • vue中axios的使用详解
    目录1、选择什么网络模块2、JSONP3、axios的请求方式4、axios框架的基本使用1、新建vue项目2、安装axios依赖3、编写代码4、请求结果5、axios发送并发请求方...
    99+
    2022-11-13
  • Vue中webpack的使用详解
    目录1、什么是Webpack2、模块化的演进AMDCMDES6模块3、安装Webpack4、使用webpack总结1、什么是Webpack 本质上, webpack是一个现代Java...
    99+
    2022-11-13
  • Vue中slot的使用详解
    目录使用 slot基础用法具名插槽作用域插槽slot 实现总结在Vue中,我们使用组件来组织页面和组织代码,类似于搭积木,每一个组件都是一个积木,使用一些相同或者不同组件就能搭建出我...
    99+
    2022-11-13
  • vue中的ElementUI的使用详解
    登录+sessionStorage 效果展示 登录成功后会把用户id存入前端的sessionStorage,拦截器会根据是否存在用户id来进行拦截 也可以将用户权限存入sessi...
    99+
    2022-11-12
  • 详解vue项目中使用vuedraggable
    最近在学习一个可视化搭建的项目,里面用的拖拽就是draggable.js。看了几个中文的文档,有很多坑,可能是没有及时更新的原因。 VUe  建议去看vuedraggabl...
    99+
    2022-11-13
  • vue中 this.$set的使用详解
    目录vue中 this.$set的使用使用为什么能够响应式?分析总结vue中 this.$set的使用 背景:在我写前端项目的时候,后端给我们的一个json对象,并且我已经渲染在页面...
    99+
    2022-11-12
  • Vue中createElement使用实例详解
    目录一:参数说明二:使用示例三:源码解读Vue 提供了createElement 来创建虚拟dom,方便我们来函数化的方式来定义复杂的组件结构。在组件定义的时候,通常render函数...
    99+
    2022-11-13
    vue createElement使用 vue createElement
  • 详解Vue中keep-alive的使用
    目录前言1、概念:2、作用:3、使用方式:前言 keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。例如:在开发中经常有从列表跳...
    99+
    2023-03-03
    Vue keep-alive使用 Vue keep-alive
  • Vue中watch使用方法详解
    目录前言watchimmediate和handlerdeep拓展前言 说到 vue 中的 watch 方法,大家可能首先想到,它是用来监听数据的变化,一旦数据发生变化可以执行一些其他...
    99+
    2023-01-28
    Vue watch用法 Vue watch原理
  • vue中使用geobuf的示例详解
    需要安装geobuf和pbf这两个库 cnpm i -S geobuf pbf 引入 import geobuf from 'geobuf'; import Pbf from 'pb...
    99+
    2022-11-13
  • Vue中XMLHttpRequest的使用方法详解
    Vue中使用XMLHttpRequest(XHR)来获取数据的方式与传统的HTML页面相同。以下是Vue中XMLHttpRequest的详细使用方法: 1.创建XMLHttpRequ...
    99+
    2023-05-19
    Vue XMLHttpRequest使用方法 Vue XMLHttpRequest Vue XMLHttpRequest
  • Vue中使用Ueditor的示例详解
    目录一、下载Ueditor包 二、编译下载文件 三、在Vue项目中引用一、下载Ueditor包  官网地址:http://fex.baidu.com/u...
    99+
    2022-11-13
  • 详解eslint在vue中如何使用
    目录1、说明2、下载相关依赖包3、配置文件.eslintrc.js(还有其他方式配置规则)4、在vscode(版本1.44.0)配置保存时自动格式化代码5、在package.json...
    99+
    2022-11-12
  • vue中$set用法详解
    目录1、为什么要用set?2、set用法3、什么时候使用set?4、文档地址摘要:地址没有改变,vue就监测不到数据变化。这个时候,双向绑定就失效了。 想了解有关JS堆栈的知识?请点...
    99+
    2022-12-09
    vue中$set用法 $set使用 vue中的$set
  • VUE中的mapState和mapActions的使用详解
    最近在开发一套系统,前端使用VUE开发,由于本人是后端开发,前端也会一点,但是VUE接触不多,在VUE项目开发遇到的一些坑记录一下,不是专业前端写好的不好,大家不要唝。。。 在VUE...
    99+
    2022-11-13
  • vue中router-view组件的使用详解
    在开发vue项目中经常需要实现一个页面里面可以切换着展现不同的组件页面 例如:下图中通过点击侧边栏不同的组件路由到不同的组件页,而侧边栏和顶部部分是不变的,切换的只是组件页面。 这...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作