vue添加实例属性

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

Vue.prototype.$appName = 'My App'

 

假如我们全局定义一个实例属性,这样就可以在所有vue实例中使用。

例如:

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

Vue.prototype.$appName = 'hello world' //全局定义一个实例属性

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

HelloWorld.vue(这样就可以在各个vue实例中使用)

<template>
  <div class="hello">
   	<button @click="handleClick">按钮</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      appName: 'Welcome to Your Vue.js App'
    }
  },
  methods: {
  		handleClick(){
  			let data = this.$appName;
  			console.log('kkkk',data); // hello world
  		}
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

注意:在这里我们可以看到,在用原型去定义一个实例属性的时候,我们在属性名的前方加了一个 '$',比如我们刚才定义的属性名'appName'的前方就有一个'$',其实这么做的目的就是:避免与在各个vue实例中已定义相同名称的属性发生冲突。

假如我们不加'$',会发生什么情况呢?

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

Vue.prototype.appName = 'hello world' //全局定义一个实例属性

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

HelloWorld.vue

<template>
  <div class="hello">
   	<button @click="handleClick">按钮</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      appName: 'Welcome to Your Vue.js App'
    }
  },
  methods: {
  		handleClick(){
  			let data = this.appName;
  			console.log('kkkk',data); // Welcome to Your Vue.js App
  		}
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

从上面我们可以看出打印的结果是不一样的,因为全局定义的属性名与实例中定义的属性名是相同的,所以你得到的只是各个实例中的数据,而不是全局中想要得到的数据,所以为了区别开才要加个‘$’,加什么不重要,是随意的,重要的是避免冲突。

不是全局配置:

 HelloWorld.vue

<template>
  <div class="hello">
   	<button @click="handleClick">按钮</button>
  </div>
</template>

<script>
import Vue from 'vue'
Vue.prototype.$exe = { //定义一个属性
	num: '23'
}
export default {
  name: 'HelloWorld',
  data () {
    return {
      //appName:this.$exe.num 
    }
  },
  methods: {
  		handleClick(){
  			//let data = this.appName; //23
  			let data = this.$exe.num; //23
  			console.log('kkkk',data);
  		}
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

 

 

转载于:https://my.oschina.net/u/3946362/blog/1999043

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值