1,vue脚手架 npm i -g @vue/cli

2,安装vue vue create demo -m npm

3,运行 npm run serve

4,<template></template>存放内容,必须有,不然报错,其中只可以有一个根标签

5,<script></script> 存放js业务代码的

6,<style></style>存放css样式的

7,内容渲染: v-text/v-html

v-text相当于innerText

v-html相当于innerHTML 会渲染内容中的标签

两者都会覆盖原有内容

插值表达式 {{}}:内容渲染指令,里面填写数据,不会覆盖原有内容

可以放数据项,可以放三元表达式,对象.属性

注意:标签内的属性值不能使用{{}}插值语法,之内放在双标签中间使用

8,属性绑定指令--动态设置属性--v-bind可以省略成 :冒号

9,事件绑定指令--v-on 可以省略成 @

其中可以放 程序代码/事件函数名/事件函数名(传参)

注意:如果传递了参数,则实参$event表示事件对象

10,指令修饰符

.prevent 阻止事件默认行为

.stop 阻止冒泡

.prevent.stop阻止默认行为+阻止冒泡

.enter 键盘事件,表示按下enter键才出发

.once表示事件指触发一次

11,双向绑定 --v-model--原理:input+v-bind

含义:数据改变之后页面改变,页面呈现结果更新,数据也更新

11.B,双向绑定指令符

.number 自动将用户输入的值转换为数值类型

.trim 去除输入字符串前后空格字符

.lazy 焦点事件

12,表单项

单个复选框,通过布尔值控制是否选中,对应则选中

多个复选框,通过[value,value]中的值对应的项来判断是否选中

13,条件判断指令 v-show // v-if

相同:都是通过布尔值判断DOM元素的显示与隐藏

不同:

v-show通过display:none来隐藏元素

v-if是通过移出元素,来隐藏元素

使用场景:

需要频繁切换的时候使用v-show.

根据条件判断显示组件模块的时候使用v-if,配合v-else-if + v-else来使用

14,循环渲染指令--v-for-基于一个数组来循环渲染一个列表结构

<li v-for="item,index in List" :key='item.id'>

item表示数组中的每一项,index表示每一项的下标,index不用可以省略

必须带有key,否则警告,并且key必须是数组每一项的唯一的值,且不推荐使用index,一般后台都有id

15,虚拟DOM

虚拟DOM就是一个用来描述真实DOM结构对象,存在内存中,Vue可以根据虚拟DOM来构建页面,当数据更新之后,vue会根据新旧虚拟DOM比较,然后向旧的虚拟DOM上查缺补漏,以快速更新DOM

16,diff算法:就是新旧虚拟DOM对比的算法,用于检查新旧DOM的差异,并更新旧的虚拟DOM。

17,为什么for循环当中的 :key 要使用唯一值,而不是index?

因为遍历的是数组,如果使用下标的话,列表发生变化时,会影响其他元素的index,会误导diff算法重现渲染List,浪费性能

18,computed 计算属性

(1),语法:

与data平级


data(){....}
computed:{
jisuanA:{
    return  this.xing+ ' ' +this.ming
},
jisuanB:{....}
}

计算属性得写方法,按照函数的格式写,因为使用它的位置必须将其视为属性

必须return一个值

(2),缓存特点

计算属性对应的函数并不会触发多次,只会计算一次,并且将计算的值缓存起来

当计算属性再次计算属性时就会从缓存中的值直接使用,而不是再次调用函数重新计算

(3)get()和set()方法

computed:{
  jiasuanA:{
		get(){} //在get方法中正常计算
		set( value ){
				log(value)
		} //在set方法中修改计算属性值,value就是修改之后的值
	}
}

19.侦听器 wacth 侦听data和props中的数据变化

触发条件:当监听的数据发生变化的时候触发

位置:要写在watch中,与data,methods平级

data(){...},
wacth:{

(1),	//------------函数写法----------------
		data数据项 ( 新值 , 旧值 ){...}
		uname(newV,lodV ){....}
    
(2),	//-------------对象写法---------------
		data数据项:{
			handler ( 新值  ,  旧值 ){....}
			handler (newV,lodV){}
			immediate: true, // 可选
    	deep: true // 可选
	}
}

(3), 使用侦听器的例子

在注册账号的时候,判断用户输入的账号是非已经被注册

逻辑:

1,用户在输入框中输入

2,通过侦听器监听获取输入框中的数据

3,将侦听到的值发送到服务器,等到服务器验证之后返回的结果

4,渲染结果

watch:{
		async  username(newV,oldV){
     	 	if (newVal === '') 	return	 (this.msg = '')
     		 const result = await 	axios.get('url' + newVal)
     		 this.msg = result.data.message
		}
}

(4), immediate初始监听 -- 初次加载页面的时立即开启监听属性

(5), deep深度监听 -- 如果侦听的是一个对象,那么对象中的属性值发生变化的时候无法被侦听到

deep: true // 表示深度侦听,当对象的任意属性改变后,都会触发该侦听器

(6),在实际开发中,可以单独监听一些对象的属性

watch:{
	'对象.属性'(新值){...}
	'user.name'(val){...}
}

20.组件

(1),组件命名格式:大驼峰,小驼峰,多词格式--不合格的命名可以用name来解决问题

(2),注册局部组件

vue2基础知识(1)---小白向_变量名

1,在components中注册子组件

2,在父组件中import引入组件,同样路径下的组件可以放在 {} 中

3,在父组件的component:{}中注册

4,在父组件中的template 中 使用

(3),注册全局组件--注册成全局组件之后可以在任意位置调用

vue2基础知识(1)---小白向_数据_02

1,在main.js中引入组件

2,然后通过 vue.component('组件名',导入的组件)

3,在需要调用的任意位置调用

21.组件传值--父传子

vue2基础知识(1)---小白向_数组_03

1,父组件中,传输data中的数据

2,父组件中,引入子组件,在子组件标签中使用冒号传输 : 变量名=' 变量名 '

3,子组件中,接收父组件传输过来的数据,使用prop: props:[ ' 变量名A ', ' 变量名B ' ..... ]

4,子组件中直接引用变量名