VUE官网:https://cn.vuejs.org/v2/guide/instance.html#%E6%95%B0%E6%8D%AE%E4%B8%8E%E6%96%B9%E6%B3%95
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script src="vue.js"></script> 7 </head> 8 <body> 9 <div id="app"> 10 {{ a }} 11 </div> 12 <script> 13 var data = { a : 1 }; 14 var vm = new Vue({ 15 el : '#app', 16 data : data //右边的data是第13行的data 17 }); 18 //data.a = "hi~!"; //修改的是第13行的声明的变量data的属性,视图进行了重新渲染 19 </script> 20 </body> 21 </html>
预览效果:

说明:

体验一下 Vue 的响应式。高亮处为新增的代码。改变data的a属性,视图会被重新渲染。
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script src="vue.js"></script> 7 </head> 8 <body> 9 <div id="app"> 10 {{ a }} 11 </div> 12 <script> 13 var data = { a : 1 }; 14 var vm = new Vue({ 15 el : '#app', 16 data : data //右边的data是第13行的data 17 }); 18 data.a = "hi~!"; //修改的是第13行的声明的变量data的属性a的值,视图进行了重新渲染 19 </script> 20 </body> 21 </html>
视图被重新渲染了:

说明:
语句 data.a = "hi~!"; 是改变了第13行声明的变量 data 的属性 a 的值。
用 vm 来保存了 Vue 的实现,如果用 vm 去改变 a 属性,效果是跟用 data.a = "hi~!";语句改变是一样的。vm.a 等同于 data.a。
即将上面的语句 data.a = "hi~!";更改为 vm.a = "hi~!";效果也是一样的。
修改 vm.a ,data.a 同时改变。修改 data.a , vm.a 同时改变。


使用 Object.freeze() 之后,响应系统无法再追踪变化。

点击按钮之前:

点击按钮之后:

使用 Object.freeze() 。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
{{ a }}
<button v-on:click=" a='goodbye' ">按钮</button>
</div>
<script>
var data = { a : 'hi' };
Object.freeze( data );
var vm = new Vue({
el : '#app',
data : data
});
</script>
</body>
</html>

点击按钮之前:

点击按钮之后:

使用前缀 $ 可以暴露 vue 示例的 property。

$watch 方法可以观察一个变量的变化,会纪录变量变化后的值与变化前的值。在变量变化后调用 $watch 方法。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="vue.js"></script> </head> <body> <div id="app"> {{ a }} </div> <script> var obj = { a : 'hi' }; var vm = new Vue({ el : '#app', data : obj }); vm.$watch('a', function(newVal, oldVal){ console.log(newVal, oldVal); }) vm.$data.a = "test"; </script> </body> </html>

控制台输出:
test hi
浙公网安备 33010602011771号