Vue3.x基础

图片是之前写md的时候直接截图的,懒得再截一次上传,自己试试比较好。

Vue3.x基础

Vue是一种MVVM模式(Model-View-ViewModel)的前端框架,**Model(模型)**可以理解为数据,**View(视图)**可以理解为HTML页面,ViewModel(视图模型)即业务逻辑(或类似于方法),Vue就是用MVVM实现的数据双向绑定,即Model层与View层均与ViewModel层互相关联,而Model层与View层没有直接联系,是一种低耦合、可重用、易测试的模式。

Vue3.x官方文档:https://v3.cn.vuejs.org/

推荐使用Live Server插件进行Vue单页应用的编写。

创建一个Vue应用

首先确保使用CDN引入了Vue(在单页应用中)

<script src="https://unpkg.com/vue@next"></script>

也有其他使用构建工具快速创建的方法,如使用vue-cli、vite、nuxt.js等,后续再议。

Vue需要一个根节点来告诉Vue在哪挂载与渲染,即需要一个最外层包裹的div。

<body>
    <div id="app">
    </div>
</body>

然后我们需要一个Script标签,在里面进行Vue应用的创建。

<script>
    const app = {
        data() {
            return {
                str: "Hello World",
            }
        }
    }

    Vue.createApp(app).mount("#app");
</script>

其中createApp是Vue中自带的一个创建应用的方法,需要我们告诉Vue这个app是如何定义的,后续操作都在这个常量(变量)中进行,mount则定义Vue应用挂载与渲染到哪一个节点,里面的参数就是根节点的id。

注:const app与let app都可以使用。

我在script标签中定义了一个常量app,在这个常量中定义了需要返回的数据,也就是告诉了Vue我需要把html中的str变量渲染成Hello World。app这个常量的内容是json格式的,不要忘记元素之间的逗号。

然后我们在根节点中使用这个变量,语法是mustache(两个大花括号),与微信小程序类似。

<body>
    <div id="app">
        {{str}}
    </div>
</body>

现在网页的整体是这样的:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- CDN引入Vue3.x -->
    <script src="https://unpkg.com/vue@next"></script>
    <title>第一个Vue应用</title>
</head>

<body>
    <div id="app">
        {{str}}
    </div>
</body>

<script>
    const app = {
        data() {
            return {
                str: "Hello World",
            }
        }
    }

    Vue.createApp(app).mount("#app");
</script>

</html>

注:如果没有成功,可能是CDN加载失败,可以使用下载Vue源码后导入的方法。

至此,第一个Vue应用已经创建完成(仅适用于单页应用)。

Vue的生命周期

https://v3.cn.vuejs.org/images/lifecycle.svg

官方文档里面的图,大致解释一下:

createApp、app.mount

开始创建一个Vue实例对象。

创建时生命周期(单次)

beforeCreate(创建前)

这个时候对象中只有一些生命周期函数和默认事件,data、methods等方法中的数据都还没有初始化

created(创建后)

这个时候,data、methods等方法中的内容都已经初始化好了,已经可以操作了。这里往往用来进行ajax请求(即向后端发送请求读取数据)。

created之后、beforeMount之前

Vue开始编辑模板,判断html内容中有没有模板<template>标签(还在渲染阶段),如果有,把template中的内容进行编译渲染,如果没有,把el根节点中的内容进行编译渲染,如果还没有,就啥也不渲染。此时,Vue在执行createApp中的数据和方法,并将所有内容编译成为一个模板字符串,最后再渲染到内存中,但此时还没有将内容挂载到根节点中

beforeMount(挂载前)

已经将模板字符串渲染好了,但是还没有挂载到页面中。

mounted(挂载后)

将模板字符串挂载到页面中,此时一般进行一些早期DOM操作。


运行时生命周期(多次调用)

beforeUpdate(数据更新前)

data中的数据是新的,但是页面中的数据还没有同步。

updated(更新后)

页面和data的数据已经同步了。


销毁时生命周期(单次)

beforeDestroy(销毁前)

此时所有的data、methods等方法中的数据都还可以使用,往往进行接口的关闭操作等。

destroyed(销毁后)

此时整个页面已经完全被销毁,所有内容均不可用。

Vue的mustache模板语法

前面提到Vue的mustache模板语法与微信小程序类似,但Vue中的模板语法完全支持JavaScript表达式,如字符串分割.split(),字符串、数组反转.reverse(),数组切割.slice()、.splice(),三元表达式、运算符等

一般使用

<span>String: {{ str }}</span>

v-once的使用

v-once会使当前元素内的模板变成一次性的,data更新不影响当前元素,但是要注意其他元素。

<input type="text" v-model="str" /><br/>
<span v-once>v-once String: {{ str }}</span><br/>
<span>String: {{ str }}</span>

这里用到了v-model双向绑定。

v-html的使用

v-html会将data中的html编译成为html样式。

<span>raw: {{ str }}</span><br/>
html: <span v-html="str"></span>
const app = {
    data() {
        return {
            str: "<b>Hello World</b>",
        }
    }
}

v-bind的使用

v-bind会将数据绑定到当前元素,常用于动态类名(class)绑定等。

v-bind的语法糖(缩写)是一个英文冒号==:,**:class=v-bind:class**。

<span v-bind:class="classRed">{{ str }}</span><br />
<span :class="classBlue">{{ str }}</span><br />
<span :class="classOrange">{{ str }}</span>
const app = {
    data() {
        return {
            str: "Hello World",
            classRed: "red",
            classBlue: "blue",
            classOrange: "orange",
        }
    }
}
.red {
    color: red;
}

.blue {
    background-color: blue;
}

.orange {
    box-shadow: 5px 5px 1px 2px orange;
}

v-on的使用

主要用法

v-on用于监听DOM事件,如click、keyup、keydown等。

v-on的语法糖(缩写)是==@==,@click=v-on:click

<button @click="hidden=!hidden">点我{{ hidden?'显示':'隐藏' }}span</button><br/>
<span :class="hidden?'hidden':''">{{ str }}</span>
const app = {
    data() {
        return {
            str: "Hello World",
            hidden: true,
        }
    }
}
.hidden {
    display: none;
}
事件修饰符

为了更方便地实现一些逻辑,Vue提供了一些修饰符供我们使用,使用方法为==@click.xxx==,具体内容参考文档:

https://v3.cn.vuejs.org/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6

按键修饰符、系统修饰键

同理,Vue提供了监听键盘按键的修饰符,使用方法同上,具体内容参考文档:

https://v3.cn.vuejs.org/guide/events.html#%E6%8C%89%E9%94%AE%E4%BF%AE%E9%A5%B0%E7%AC%A6

https://v3.cn.vuejs.org/guide/events.html#%E7%B3%BB%E7%BB%9F%E4%BF%AE%E9%A5%B0%E9%94%AE

v-show的使用

控制元素的显示与否,v-show=“true”则显示,v-show=“false”则隐藏,只是给元素添加了一个css样式display: none;

<button @click="hidden=!hidden">点我{{ hidden?'显示':'隐藏' }}span</button><br/>
<span v-show="!hidden">{{ str }}</span>
const app = {
    data() {
        return {
            str: "Hello World",
            hidden: true,
        }
    }
}
.hidden {
    display: none;
}

v-if的使用

v-if(条件渲染)可以控制多个元素的显示与否,与v-show不同,v-if是动态渲染,并不是简单地给元素添加样式display: none;

<button @click="hidden=!hidden">{{ !hidden }}</button><br/>
<span v-if="!hidden">v-if=true</span>
<span v-else>v-if=false</span>
const app = {
    data() {
        return {
            hidden: true,
        }
    }
}

v-for的使用

v-for(列表渲染)即循环渲染多个数据结构类似的元素,通常需要与==:key==配合给元素绑定一个key。

<ul>
    <li v-for="(item, index) in list" :key="index">
        {{ index }}:{{ item }}
    </li>
</ul>
const app = {
    data() {
        return {
            list: ["111","222","333"]
        }
    }
}

v-model的使用

v-model(双向绑定)将元素与数据动态双向绑定,同步变化。

<input type="text" v-model="str" /><br/>
str: {{ str }}
const app = {
    data() {
        return {
            str: "",
        }
    }
}

Vue的data property与方法

data property

const app = {
    data() {
        return {
            msg: "Hello World",
        }
    }
}

以上即data property的使用方法。data在Vue中体现为一个函数,在渲染时被返回为一个对象,以$data形式存储在实例中,在JavaScript中使用方法为this.$data($data可以忽略)。由于只在创建时生命周期被添加到节点中,因此所有在模板中所用到的数据都需要在data中声明。

methods

所有在模板中需要被调用的方法都需要在methods中声明。

<button @click="clickHandler">点我+1</button>
num: {{ num }}
const app = {
    data() {
        return {
            num: 0,
        }
    },
    methods: {
        clickHandler() {
            this.$data.num++;
        }
    }
}

computed计算属性

计算属性常用于响应式数据的复杂逻辑,与methods不同,methods需要触发方式,而computed是完全响应式的,无需触发。

<button @click="addItem">添加一项</button>
<ul>
    <li v-for="(item, index) in list" :key="index">
        {{ index }}-{{ item }}
    </li>
</ul>
{{ itemLength }}
const app = {
    data() {
        return {
            list: ["111", "2222", "33333"],
        }
    },
    methods: {
        addItem() {
            this.$data.list.push("addItem");
        }
    },
    computed: {
        itemLength() {
            return this.$data.list.length;
        }
    }
}

计算属性也提供了getter和setter,详见https://v3.cn.vuejs.org/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%E7%9A%84-setter/

侦听器

看官方文档吧,想不到合适的例子了。

https://v3.cn.vuejs.org/guide/computed.html#%E4%BE%A6%E5%90%AC%E5%99%A8


methods: {
    addItem() {
        this.$data.list.push("addItem");
    }
},
    computed: {
        itemLength() {
            return this.$data.list.length;
        }
	}
}

计算属性也提供了getter和setter,详见https://v3.cn.vuejs.org/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%E7%9A%84-setter/

单页应用只能讲这么多,后续使用vue-cli创建项目时还有更多内容可以讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渡城WEDU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值