准备工作
创建vue
项目,使用终端打开我们想要放置创建的vue
的文件夹然后输入这段语法npm create vite@latest
,然后输入我们想创建的项目名称,然后选择我们想要的框架,选择vue
,选择我们想要使用的语言,这样我们就创建好了一个使用vue
框架的vite
项目,然后在编译器里面会有一个package.json
文件
这个文件里面记录着这个vite项目需要的依赖,所以我们直接在这个项目里面打开终端,
npm i
下载就可以了,然后我们看到这个文件里面有一个key为dev,这个dev记录着vite项目,所以我们直接npm run dev
,就可以就这个项目跑起来了
可以看到这个vite项目默认是跑在本机的5173端口的,Ctrl加单击就能打开这个端口
我们要知道vue是单页框架,只用创捷一个html文件,vue后缀的文件都只是代码块,那怎么将vue引入html中呢,我们创建的vite项目有一个main.js文件,
import {createApp} from vue
是指在vue中引入了一个创建函数createApp,import App from './App.vue'
是指你引入了一个根组件'./App.vue'
并用App进行了代表,create(App).mount('#app')
表示创建了一个应用实例,并将它挂在了id为app的DOM元素上,接下来我们就可以去vue里面写代码块了
vue基础语法
我们要先装个插件
然后我们打开
'./App.vue'
,把初始化生成的默认代码删除,输入vb3s
快捷生成一段vue格式的代码,在vue中的代码无法被浏览器识别,它里面不是真实的html代码,而是字符串,所以我们可以用一些vue打造好的语法。
响应式
-
reactive
函数 负责将一个对象变成响应式,这个对象中任何属性值修改都会触发页面更新 -
ref
函数 负责将一个原始值变成响应式。
<template>
<div>
<button>0</button>
</div>
</template>
<script setup>
</script>
<style lang="scss" scoped>
</style>
我们用button
创建一个容器里面放了数字0
页面上就会有一个数字0
那现在我们想要实现一个功能使按钮每点击一次就加一
<template>
<div>
<button @click="add">{{state.count}}</button>
</div>
</template>
<script setup>
import { reactive } from 'vue';
const state = reactive({
count:0
})
function add (){
state.count++
}
</script>
<style lang="scss" scoped>
</style>
我们直接给这个容器绑定一个名为add
的监听事件,然后容器里的也要改成一个变量,然后我们接着写点击后的函数,然后因为页面加载完后不会因为js
中的函数变化而重新渲染,所以我们要在js
中要发生变化的对象添加一个响应式,从vue
中引入这个响应式
但是这里的rective
只能把引用类型变为响应式,如果我们定义的是基本类型,怎么实现这个效果呢
<template>
<div>
<button @click="add">{{num}}</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
const num =ref(100)
function add(){
num.value++
}
</script>
<style lang="scss" scoped>
</style>
那我们就要使用ref
这个函数使基本类型变成响应式,而且最后修改这个值的时候要带上value
这个属性。
组件化
组件化:将某些具有独立功能或者可复用的代码单独封装成一个组件,在引入其它页面中使用
因为我们使用vue
框架的目的是实现复用,所以我们使用单页应用,就一个html
文件,其它的都是后缀为vue
的代码块,上面那个app.vue
是唯一会拿html
上显示的代码,所以我们尽量在别的vue
后缀文件中写代码块,再引入app.vue
,具体怎么操作看下面
我们先在
components
文件夹下面创建一个demo1
文件,写两个input
框,然后此时在项目里是看不到这个代码块的效果的,因为main.js
只引入了app.vue
所以我们要将这段代码引入app.vue
,当成组件使用,才能在html
文件上生效
用
import
引入进来,用变量名demo
去接收,然后我们直接用demo1做成一个标签使用
这样,我们就成功将
demo1.vue
文件当成代码块引入html
中了,我们知道了这两个语法,那让我们来写一些小demo吧
小demo
demo2
1.实现一行文字每次点击都会在黄色和红色之间切换
2.实现鼠标点击下去就变为绿色,放开又变回来
3.实现在html
中用js
的内容绑定样式
<template>
<div>
<h2 v-bind:class="[flag?'yellow' : 'red']" @click="handle">Hello World</h2>
<h3 :class="{'green':isGreen}" @mousedown="down" @mouseup="up">阿炜有点萎了</h3>
<h4 :style="{color:state.color}">阿炜有点萎了</h4>
</div>
</template>
<script setup>
import { reactive, ref } from 'vue'
const flag =ref(false)
const handle = () =>{
flag.value=!flag.value
}
const isGreen = ref(false)
const down = () =>{
isGreen.value = true
}
const up = () =>{
isGreen.value = false
}
const state =reactive({
color:'blue'
})
</script>
<style lang="css" scoped>
.red{
color: red;
}
.yellow{
color: yellow;
}
.green{
color: green;
}
</style>
1,我们h2
标签里面给handle
绑定一个点击事件,让它每次点击得到的变量在true
和false
之间变化,并将它变为响应式,然后在标签里面进行判断,如果为true
,则就为yello
,如果为false
则为red
。由于属性会发生变化,所以我要要用v-bind
去对class
进行绑定,最后就可以实现这个效果了
2,我们要给h3绑定两个事件,down
是鼠标按下去,up
是鼠标松开,按下去则class
添加属性green
,松开则添加属性green
,通过改变isGreen
的值,down
为true
,up
为false
,这里属性也会发生变化所以也要用v-bind
:,不过可以简写为:
3,直接在h4
标签里面添加属性,我们想添加js
里的对象属性,只需把这个对象变为响应式,再将其属性放在样式里就可以了。
最后记得在app.vue
中引入demo2
效果展示
demo3
实现一个功能,就是两段文字内容,只有一段会显示,设置一个按钮,每次点击都会使这两段内容交替显示
<template>
<div>
<!-- <h2 v-show="isShow">章总萌萌的</h2> -->
<h2 v-if="isShow">章总萌萌的</h2>
<h2 v-else">陈总萌萌的</h2>
<button @click="toggle">显示隐藏</button>
</div>
</template>
<script setup>
import { ref } from 'vue'
const isShow = ref(true)
const toggle = ()=>{
isShow.value = !isShow.value
}
</script>
<style lang="css" scoped>
</style>
一样的我们先给这个button
容器添加一个点击事件,再定义一个变量isshow
并给他绑定为响应式,初始值为true
,每次点击都在true
和false
之间切换,那这个demo
的问题就变成了怎么让一个标签隐藏呢,我们这里用到了v-if/else
,判断这个值为ture
还是false
,为true
则显示,为false
则隐藏。
最后引入app.vue。
效果展示
demo4
实现一个功能,页面上有一个列表,还有一个input
输入框和一个button
文本框,我们要将input
框输入的内容在button
文本框被点击之后添加到列表里
<template>
<div>
<input type="text" v-model="data">
<!-- v-model可以将用户输入的内容同步到变量里面 -->
<button @click="add">添加</button>
<ul>
<li v-for="(item,i) in list">{{ i+1 }} -- {{item}}</li>
</ul>
</div>
</template>
<script setup>
import { ref } from "vue"
const list = ref(["html","json","css","vue"])
const add = () => {
//获取用户在 input框中输入的值,再push进list
list.value.push(data.value)
}
const data = ref("")
</script>
<style lang="scss" scoped>
</style>
我们先在js
里面定义一个数组,并绑定响应式,然后在li
中使用语法v-for
将它们添加进去,item
代表内容,i
代表小标,然后我们给button
绑定一个点击事件,每次点击都往数组里添加input
里面输入得内容,但是在js
中怎么获取到input
框中得内容的呢,使用v-model
可以得到input
框中的内容,然后在js
中定义一个变量data
去接收,这样我们就可以拿到点击事件我们想添加的内容了。
效果展示
结语
好啦,到这里我们就把Vue
的一些基础知识和小demo
都讲完啦。通过这几个小例子,大家应该对Vue
的响应式、组件化以及基础语法有了一定的了解。Vue作为一个前端框架,确实非常强大和灵活,能够帮助我们快速开发出各种交互效果丰富的网页应用。希望大家在学习过程中能够多动手实践,把学到的知识真正用起来,这样才能更好地掌握Vue
。好啦,今天的分享就到这里啦,感谢大家支持。