vue入门教程1
学习课件
https://www.bilibili.com/cheese/play/ep43199?csource=common_hp_favorite_null&spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV1Th411G7iN?p=1&vd_source=7434cfee3c0d52d31452f06dad54119f
vue语法体验
NVM USE NODE_VERSION
nvm use 16.14.0 可以切换多个nvm版本
vue的基本结构
先写一个简单的hello,world来看下结构,当前主要分为三个部分组成
1.首先created是最先执行的,它是一个生命周期,也叫钩子函数,用于页面还没加载完毕时发送请求,初始化data里的值。
2.data一般用来存放vue中的变量,通过return将数据返回到created中
3.methods用来写相关模块的函数以及功能的实现,格式为async+方法名,通常通过发送请求请求到后台数据
4.computed是界于created和mounted之间发生的,此时正是页面进行渲染的时候
5.mounted是加载完dom操作后才会触发,它和created一样只会执行一次,此时页面已经渲染完成,通常用于存放需要渲染的内容
下面是一个电简单的自加计算器

按照传统的做法就是
document.getElementById('root').innerHTML(3) //这种是手动操作的一种方式
之前我们是面向Dom编程,现在是面向数据编程
总结:
数据定义: 通过data()来实现
template: 指的就是在root节点下需要渲染什么样的内容,具体是由mount中的参数来决定
mounted(): 表示页面加载完成后自动执行的命令
思考的一些问题:
我们知道一般vue使用ajax或者axios来获取后端数据,并且好像放在created里面和mounted里面都可以获取数据并正确渲染。那么放在created里面和mounted里面有什么区别呢?
参考:
javascript - Vue.nextTick 的原理和用途 - 个人文章 - SegmentFault 思否
简单来说:如果你修改了某个dom中的数据,视图并不会立即更新。Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。,此时获取关于此dom的一切操作都是无效的,怎么办?在nextTick的回调中执行即可。$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。
js字符串反转的几种方式
- 第一种:
字符串转数组,反转数组,数组转字符串。
- split(“”):根据空字符串拆分数组
- reverse():数组反转元素位置
- join(“”):数组转回字符串,且不带分隔符
let str = "hello world";
let newStr = str.split("").reverse().join("");
console.log(newStr);
- 第二种:
使用遍历以及api charAt()
let str = "hello world";
let newStr = "";
for(let i=0;i<i.length;i++){
let s = str.charAt(str.length-i-1);
newStr += s;
}
console.log(newStr);
2.v-on编写字符串反转
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.global.js"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
Vue.createApp({
data(){
return {
content: 'hello, world' //为什么这里定义的数据在通过console来打印不显示?
}
}
,
// mounted(){
// setInterval(() =>{
// console.log
// }, 1000)
// },
methods: {
handleBtnClick(){
let newStr = this.content.split("").reverse().join("")
//说明: split("")意思就是按照空字符串进行打散,然后反转然后再聚合为字符串不带分隔符
/*
split(“”):根据空字符串拆分数组
reverse():数组反转元素位置
join(“”):数组转回字符串,且不带分隔符
*/
console.log(newStr)
this.content = newStr
}
},
template: `
<div>
{{ content }}
<button v-on:click="handleBtnClick"> 反转 </button>
</div>
`
}).mount('#root')
</script>
</html>
v-on:click 用于绑定事件,相当于html中的on-click
3.show-内容展示或者隐藏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./js/vue.global.js"></script>
</head>
<body>
<div id="root"></div>
</body>
<script>
Vue.createApp({
data(){
return {
show: true
}
}
,
// mounted(){
// setInterval(() =>{
// console.log
// }, 1000)
// },
methods: {
handleBtnClick(){
/*
写法1
if (this.show == true) {
console.log(this.show)
this.show = false
} else {
console.log(this.show)
this.show = true
}
*/
//写法2
this.show = !this.show
}
},
template: `
<div>
<span v-if="show"> hello, world !</span>
<button v-on:click="handleBtnClick"> 展示/隐藏 </button>
</div>
`
}).mount('#root')
</script>
</html>
总结:
通过 true或者false来控制span标签是否展示
补充:
this.show = !this.show 用于true跟false之间的互换
vue基础语法
todolist和v-model双向绑定
<body>
<div id="root"></div>
</body>
<script>
Vue.createApp({
data(){
return {
//list: ['hello','world','dell','lee']
list: [],
inputValue: ''
}
}
,
methods: {
handleAddClick(){
this.list.push(this.inputValue) //把值进行赋值增加到list[]中即可
}
},
template: `
<div>
<input v-model="inputValue"/> <!--v-model中的inputValue跟data中的这个值做了双向绑定----->
<button v-on:click="handleAddClick">增加</button>
</div>
<div>
<ul>
<!---<li v-for="item of list"> {{item}}</li>--->
<li v-for="(item,index) of list"> {{item}} {{index}}</li>
</ul>
</div>
`
}).mount('#root')
</script>
todolist: 用于循环一个数组列表
可以使用
v-for="item of list"
或者
v-for="(item,index) of list"> 这种可以携带索引
v-model: 用于实现对template中的元素跟data中的数据进行绑定,输入框中输入的数据通过函数写入到data中的list表中
一个标签上的属性如果想要跟data中的数据进行绑定,需要用到的v-bind这个属性
v-bind属性

代码参考
<script>
Vue.createApp({
data(){
return {
//list: ['hello','world','dell','lee']
list: [],
inputValue: ''
}
}
,
methods: {
handleAddClick(){
this.list.push(this.inputValue) //把值进行赋值增加到list[]中即可
}
},
template: `
<div>
<input v-model="inputValue"/> <!--v-model中的inputValue跟data中的这个值做了双向绑定----->
<button v-on:click="handleAddClick" v-bind:title="inputValue">增加</button>
</div>
<div>
<ul>
<!---<li v-for="item of list"> {{item}}</li>--->
<li v-for="(item,index) of list"> {{item}} {{index}}</li>
</ul>
</div>
`
}).mount('#root')
组件的概念1
页面上的一部分都可以看作是一部分,页面的所有的文件写到一个文件中很难维护,所哟对列表项都可以拆分为组件