Vue2(一):初识Vue、模板语法、数据绑定、el和data的两种写法、理解MVVM、数据代理

一、初识Vue

官网链接https://cn.vuejs.org/

1.实例中的el和data

  • el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
  • data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。(后续的插值语法)
<!-- 准备好一个容器 -->
	<div id="demo">
		<h1>Hello,{{name}}</h1>
		<!-- 大写 -->
		<!-- <h1>Hello,{{name.toUpperCase()}</h1>  -->
	</div>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		//创建Vue实例 const可省略
		//const vm = new Vue({
		new Vue({
			el: '#demo', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
			data: { //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
				name: 'zwr',
			}
		})
		</script>

2.总结

1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;
2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;
3.root容器里的代码被称为【Vue模板】;
4.Vue实例和容器是一一对应的;
5.真实开发中只有一个Vue实例,并且会配合着组件一起使用;
6.{{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性;
7.一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新;

注意区分:js表达式 和 js代码(语句)
1. 表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:

  • (1). a
  • (2). a+b
  • (3). demo(1)
  • (4). x === y ? ‘a’ : ‘b’

2.js代码(语句)

  • (1). if(){} // 判断语句
  • (2). for(){} // 循环语句

二、模板语法

1.插值语法

功能: 用于解析标签体内容,写在html标签里面,也就是身体里面
写法:{{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性。

2.指令语法

功能: 解析标签属性、解析标签体内容、绑定事件
举例:v-bind:href = ‘xxxx’ ,xxxx 会作为 js 表达式被解析
说明:Vue 中有有很多的指令,此处只是用 v-bind 绑定举个例,后续还有很多v-???

 <div id="root">
        <h1>插值语法</h1>
        <h3>你好.{{name}}</h3>
        <hr />
        <h1>指令语法</h1>
        <a v-bind:href="url">非常nice</a>
        <!-- v-bind可以简写为: -->
        <a :href="url">非常nice</a>
    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

    new Vue({
        el: '#root',
        data: {
            name: '野良',
            url: 'https://www.bilibili.com/'
        }
    })
</script>

'Date.now()'当前时间时间戳,url.toUpperCase() 大写,效果如下:
在这里插入图片描述

三、数据绑定

1. 单向数据绑定(v-bind)

数据是单向流到页面的 data👉v-bind👉vale,但是输入框的值改变不影响data的值,不流。
写法:<input type="text" v-bind:value="name">
简写:单向数据绑定:<input type="text" :value="name">

2.双向数据绑定(v-model)

数据流到页面的 data👉v-model👉vale,还可以回流vale👉v-model👉data,输入框的值改变影响data的值。
写法:<input type="text" v-model:value="name">
简写:双向数据绑定:<input type="text" v-model="name">

<!-- 如下代码是错误的,因为v-model只能应用在表单类元素(输入类元素如:input、select)上 -->
			 <h2 v-model:x="name">你好啊</h2> 

四、el和data的两种写法

1.el的两种写法

第一种写法:new Vue时配置el属性

const vm = new Vue({
			el:'#root', // 创建时就指定容器
			data:{
				name:'野良'
			}
		})

第二种写法:先创建Vue实例,随后再通过vm.$mount(‘#demo’)指定el属性。

const vm = new Vue({
			v.$mount('#root') // 第二种
			data:{
				name:'野良'
			}
		})

2.data的两种写法

对象式:

data:{
				name:'野良'
			} 

函数式:以后学习组件时data必须用函数式,否则会报错。

data: function () {
     return {
               name: '野良'
            }
            	}

函数式简写:
注:箭头函数没有this指向,写成箭头函数this指向为window,不是vue。

// 箭头函数没有this指向,写成箭头函数this指向为window不是vue
			data(){
				console.log('@@@',this) //此处的this是Vue实例对象
				return{
					name:'野良'
				}
			}

五、理解MVVM

  1. M:模型(Model) :对应 data 中的数据
  2. V:视图(View) :模板
  3. VM:视图模型(ViewModel) : Vue 实例对象
    在这里插入图片描述
    在这里插入图片描述
    1.data中所有的属性,最后都出现在了vm身上。
    2.vm身上所有的属性 及 Vue原型上所有属性,在Vue模板中都可以直接使用。

六、数据代理

1.Object.defineProperty方法

如下写法中Object.defineProperty方法让变量number和person对象里面的age产生关联。

<script type="text/javascript" >
			let number = 18
			let person = {
				name:'野良',
				sex:'女',
			}

			Object.defineProperty(person,'age',{
				value:18,
				// enumerable:true, //控制属性是否可以枚举,默认值是false
				// writable:true, //控制属性是否可以被修改,默认值是false
				// configurable:true //控制属性是否可以被删除,默认值是false

				//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
				get(){
					console.log('有人读取age属性了')
					return number
				},

				//当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
				set(value){
					console.log('有人修改了age属性,且值是',value)
					number = value
				}

			})

			// console.log(Object.keys(person))

			console.log(person)
		</script>

2.什么是数据代理?

数据代理:通过一个对象代理另一个对象中属性的操作(读/写)
通过obj2能读到修改obj1中的x

<script type="text/javascript" >
			let obj1 = {x:100}
			let obj2 = {y:200}

			Object.defineProperty(obj2,'x',{
				get(){
					return obj.x
				},
				set(value){
					obj.x = value
				}
			})
		</script>

3.Vue中的数据代理

1.Vue中的数据代理:通过vm对象来代理data对象中属性的操作(读/写)
2.Vue中数据代理的好处:更加方便的操作data中的数据
3.基本原理:通过Object.defineProperty()把data对象中所有属性添加到vm上。
为每一个添加到vm上的属性,都指定一个getter/setter。
在getter/setter内部去操作(读/写)data中对应的属性。
在这里插入图片描述
里面的_data和data是同一个东西,但是编程序不这么写太麻烦了。先拿data中的数据,处理数据把_data中的name和address解析出来,让页面识别出来,这个过程图上紫色和黄色的线就是数据代理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值