Auth: 王海飞
Data:2019-02-26
Email:779598160@qq.com
github:https://github.com/coco369/knowledge
在构造器外部操作定义构造器内部的数据、属性或者方法。比如在vue构造器外部定义了一个score为1的数据,我们在构造器外部定义了一个方法,要每次点击按钮给值加1,就需要用到Vue.set。
如: 在export default的外部定义outData变量,在export default的内部指定data的值。
var outData = {
title: 'v-on绑定点击事件',
score: '0',
color: 'blue',
detail: 'hello qianfeng',
message: 'hello Vue!',
msgHtml: '<h2>hello Vue!</h2>'
}
export default {
// 引用外部数据
data () {
return outData
}
}
<template>
<div>
{{ score }}
<!-- v-on指令 -->
<p v-on:click="add()"> 加法 </p>
<p @click="sub()">减法</p>
</div>
</template>
<script>
var outData = {
score: '0'
}
import Vue from 'vue/dist/vue.js'
export default {
// 引用外部数据
data () {
return outData
},
methods: {
add: function () {
// score变量自增1
// this.score++
// outData.score++
Vue.set(outData, 'score', 1)
alert('实现加一功能')
},
sub: function () {
// score变量自减1
this.score--
alert('实现减一功能')
}
}
}
</script>
在外部改变数据的三种方法总结:
1)使用this.score++或者this.score--的方式。
2)直接操作外部数据。使用outData.score++或outData.score--的方式。
3)使用Vue.set(outData,'score',修改后的值)。
定义在模板中解析的数组arr:
var outData = {
arr: [1, 2, 3, 4, 5]
}
在模板中使用v-for指令解析变量arr:
<ul>
<li v-for=" aa in arr">{{aa}}</li>
</ul>
定义引入外部变量outData和通过点击事件实现页面中数组arr打印的渲染:
import Vue from 'vue/dist/vue.js'
export default {
// 引用外部数据
data () {
return outData
},
methods: {
add: function () {
// score变量自增1
// this.arr[1]++
// outData.arr[1]++
Vue.set(outData.arr, 0, 10)
alert('实现加一功能')
},
}
}
本案例中定义了数组变量arr,并通过点击事件实现修改数组arr中的第二个元素的值,修改方法分为三种:
1)使用this.arr[1]++的方式。
2)直接操作外部数据。使用outData.arr[1]++的方式。
3)使用Vue.set修改第一个元素的值,如: Vue.set(outData.arr, 0, 10)。
注意: 前两种方式和第三种方式在渲染页面时有区别,前面两种形式修改数组的数据,但页面不刷新,而第三种形式使用Vue.set才会渲染页面。
因此Vue.set的存在原因如下:
由于Javascript的限制,Vue不能自动检测以下变动的数组。
当你利用索引直接设置一个项时,vue不会为我们自动更新。
当你修改数组的长度时,vue不会为我们自动更新。