zoukankan      html  css  js  c++  java
  • Vue基础入门到项目实战教程(3) —— Vue实例中的数据对象

    1、数据对象

    当一个Vue实例被创建时,它将 data 对象中的所有属性加入到Vue的响应式系统中。当这个属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

    代码示例:

    // 声明数据对象
    var data = { 
        msg: "hello" 
    }
    
    // 该对象被加入到一个 Vue 实例中
    var vm = new Vue({
      data: data
    })
    

    上面代码中,可以将我们声明的对象赋值到Vue实例中,使用 vm.msg == data.msg 比较时,结果为true。

    当我们直接修改Vue实例中data属性的值,结果将会影响到原始数据对象,代码示例:

    // 设置Vue实例中的属性会影响到原始数据
    vm.msg = "hai"
    data.msg // => hai
    
    // ……反之亦然
    data.msg = "hello world"
    vm.msg // => hello world
    

    只有当Vue实例被创建时就已经存在于data中的属性修改后才是响应式的,如果我们直接操作一个没有在Vue实例中定义的属性,或者是我们直接用赋值的形式为实例添加一个属性,例如:

    var vm = new Vue({
    	el: '#app',
    	data: {
    		msg: 'hello'
    	}
    })
    			
    vm.val = 'world';
    

    上面代码中的,对 val 属性做修改不会触发任何视图的更新,如果Vue实例中没有提前声明 val 属性,直接在模板中使用该属性,也会报错:

    <div id="app" v-cloak>
    	{{ msg }} , {{val}}
    </div>
    <script src="js/vue.min.js"></script>
    <script>
    	var vm = new Vue({
    		el: '#app',
    		data: {
    			msg: 'hello'
    		}
    	})
    			
    	vm.val = 'world';
    </script>
    

    报错信息:

    我们在设计数据模型时,一般会提前声明好页面中所需要渲染的属性,并且为属性赋初始化值。例如,我们要展示一些关于学生的信息,在获取属性的值之前,就要提前先为属性赋初始化值,示例代码:

    var vm = new Vue({
    	el: '#app',
    	data: {
    		name: '',
    		age: 0,
    		sex: '',
    		hobby: []
    	}
    })
    

    2、Object.freeze()方法

    如果不需要对实例中的属性做修改,也允许在页面中使用属性绑定的方式修改数据的话,我们可以使用 Object.freeze() 方式实现阻止修改现有的属性,即Vue的响应系统无法再追踪变化。

    示例代码:

    var obj = {
    	msg: 'hello'
    }
    			
    //阻止修改数据
    Object.freeze(obj);
    			
    var vm = new Vue({
    	el: '#app',
    	data: obj
    })
    			
    //此时不允许修改Vue实例中的属性
    vm.msg = 'hello world';
    

    运行上面的代码,在浏览器的控制台中会报错:

    $ 符号的使用

    为了区分Vue实例的属性和方法,还可以在Vue实例是属性和方法前使用 $ 符号,以便与用户定义的属性区分开。例如:

    var data = {
    	msg: 'hello'
    }
    var vm = new Vue({
      el: '#app',
      data: data
    })
    
    vm.$data === data // => true
    vm.$el === document.getElementById('app') // => true
    
    // $watch 是一个实例方法
    vm.$watch('msg', function (newValue, oldValue) {
      // 这个回调将在 `vm.a` 改变后调用
    })
    
  • 相关阅读:
    MR 原理
    Hadoop yarn任务调度策略介绍
    Hadoop 新 MapReduce 框架 Yarn 详解
    Hadoop 架构与原理
    Linux-top命令详解
    硬中断与软中断的区别
    Protocol_BGP
    Protocol_ISIS
    20条Linux命令面试问答
    Protocol_OSPF
  • 原文地址:https://www.cnblogs.com/jpwz/p/12642215.html
Copyright © 2011-2022 走看看