vue 中 Vue.prototype 详解及使用

前言:

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

1. 基本示例
  • 在main.js中添加一个变量到 Vue.prototype
js 复制代码
Vue.prototype.$appName = 'My App'
  • 这样 $appName 就在所有的 Vue 实例中可用了,甚至在实例被创建之前就可以
js 复制代码
 beforeCreate: function () {
    console.log(this.$appName)
 }
  • 控制台会打印出 My App
2. 为实例prototype设置作用域
  • 为什么 appName 要以 $ 开头?
  • $ 是在 Vue 所有实例中都可用的 property 的一个简单约定。这样做会避免和已被定义的数据、方法、计算属性产生冲突。
  • 如果我们设置:
js 复制代码
Vue.prototype.appName = 'My App'
js 复制代码
export default {
  data(){
    return{
      appName:'组件实例中的appName'
    }
  },
  beforeCreate: function () {
    console.log(this.appName)
  },
  created: function () {
    console.log(this.appName)
  },
}
</script>
  • 日志中会先出现 "My App",然后出现 "组件实例中的appName",因为 this.appName 在实例被创建之后被 data 覆写了。我们通过 $ 为实例 property 设置作用域来避免这种事情发生。
使用示例
  • 在main.js 中进行全局挂载
js 复制代码
Vue.prototype.$bus = new Vue()
  • 在vue页面中进行使用
js 复制代码
/**  发射事件,绑定事件  hidePlayVideo 一致*/
this.$bus.$emit('hidePlayVideo',true)

/** 监听创建的事件 */
this.$bus.$on("hidePlayVideo", value => {
  this.palyVideo = value
})
相关推荐
松树戈1 小时前
plus-ui&RuoYi-Vue-Plus 基于pgSql本地运行实践
前端·vue.js·spring boot·ui
SHIPKING3932 小时前
【HTML】个人博客页面
javascript·css·html
Stella25214 小时前
【Vue】CSS3实现关键帧动画
前端·vue.js·css3
junjun.chen06064 小时前
【在qiankun模式下el-dropdown点击,浏览器报Failed to execute ‘getComputedStyle‘ on ‘Window‘: parameter 1 is not o
前端·javascript·前端框架
課代表4 小时前
AcroForm JavaScript Promise 对象应用示例: 异步加载PDF文件
开发语言·javascript·pdf·promise·对象
素雪风华4 小时前
构建RAG混合开发---PythonAI+JavaEE+Vue.js前端的实践
java·vue.js·python·ai·语言模型·llms·qwen千问大模型
zm4 小时前
服务器连接多客户端
java·javascript·算法
小屁孩大帅-杨一凡5 小时前
一个简单点的js的h5页面实现地铁快跑的小游戏
开发语言·前端·javascript·css·html
purpleseashell_Lili6 小时前
配置别名路径 @
javascript·react
这个一个非常哈7 小时前
VUE篇之自定义组件使用v-model
前端·javascript·vue.js