Vue.js 是一款轻量级、渐进式的 JavaScript 框架,用于构建用户界面。它将视图层和数据层分离,通过双向数据绑定实现了响应式的数据渲染和交互。
以下是 Vue.js 的基础知识:
实例
1. Vue 实例:Vue.js 应用程序的起点是一个 Vue 实例,它是 Vue 应用程序中的根实例,用于管理应用程序的状态和行为。可以使用 new Vue() 语法来创建一个 Vue 实例。
<!DOCTYPE html>
<html lang="en">
<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">
<title>Document</title>
</head>
<body>
<!-- 创建vue的方法 -->
<div id="app">
<!-- 插值语法 -->
<h1>
{{msg}}
</h1>
</div>
<h1 class="app">
{{msg}}
</h1>
<!-- 引入vue.js文件 -->
<script src="../vue.js"></script>
<script>
/* 实例化 vue */
const vm=new Vue({
/* 挂载dom */
/* el 是elment的缩写 */
/* el: '选择器名称' */
el:'.app',
/* 初始化页面数据 */
/* 原生js通过 dom控制页面的改变 */
/* vue通过data里面的数据 改变页面 */
data:{
/* 和对象的写法一模一样 定义数据 */
msg:'hello Vue'
}
})
</script>
</body>
</html>
模板
2. 模板:Vue 使用模板语法来描述 DOM 结构和数据绑定。模板是一个 HTML 片段,可以包含 Vue 的特殊标记,如指令、表达式和事件。
<template>
<div>
<h1>{{ title }}</h1>
<ul>
<li v-for="item in list" :key="item.id">{{ item.name }}</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
title: '这是一个标题',
list: [
{ id: 1, name: '项目1' },
{ id: 2, name: '项目2' },
{ id: 3, name: '项目3' },
],
};
},
};
</script>
<style>
h1 {
color: red;
}
</style>
数据绑定
3. 数据绑定:Vue 使用双向数据绑定来实现视图和模型之间的数据同步。当数据发生变化时,视图会自动更新,反之亦然。
双向绑定:
<template>
<div>
<input v-model="message" type="text">
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
message: ''
};
}
};
</script>
计算属性
4. 计算属性:计算属性是基于其他属性计算而来的属性,它们可以缓存计算结果,以提高应用程序的性能。
<template>
<div>
<ul>
<li v-for="item in cartItems" :key="item.id">
{{ item.name }} - ¥{{ item.price }}
</li>
</ul>
<p>Total: ¥{{ totalPrice }}</p>
</div>
</template>
<script>
export default {
data() {
return {
cartItems: [
{ id: 1, name: "商品1", price: 10 },
{ id: 2, name: "商品2", price: 20 },
{ id: 3, name: "商品3", price: 30 }
]
};
},
computed: {
totalPrice() {
return this.cartItems.reduce((total, item) => total + item.price, 0);
}
}
};
</script>
内置指令
5. 指令:Vue 的指令是一种特殊的 HTML 属性,它们可以用于操作 DOM 元素、绑定事件、条件渲染和列表渲染等。常用指令包括 v-bind、v-if、v-for、v-on 等。
1. 插值语法
{{ 数据名 }}
插值语法里面可以使用 非赋值运算符,以及一些非赋值的方法
2. v-html
作用: 可以把数据里面的标签渲染到页面上,
相当于原生js的innerHTML
3. v-text
作用:
可以把数据的内容渲染出来,不会渲染HTML标签
相当于原生的 innerText
4. v-bind:
数据绑定
用法:
v-bind:属性名="数据"
简写:
:属性名="数据"
5. v-on:
事件绑定
所有的事件要写在methods里面
绑定用法:
v-on:事件名="函数名()"
简写:
@事件名="函数名"
事件修饰符:
@keydown.enter = "函数名()"
只有在按下enter键的时候才会触发函数
6. v-model:
作用:
用在表单元素(input,textarea,select):
v-model会自动寻找需要绑定的属性,
实现数据,页面的双向绑定,
数据变,页面变;页面变,数据变
7. v-if, v-else-if,v-else
- 用法:
v-if="条件判断"
条件满足,显示该标签,不满足条件的标签不会显示在dom树中,也不会显示到页面上
8. v-show
用法:
v-show="条件判断"
条件满足,显示该标签,不满子的条件标签不会显示到页面上,但是会在dom中,通过display:none不让它显示在
页面上
生命周期
6. 生命周期:Vue 实例有一系列的生命周期钩子函数,用于在组件的不同阶段执行某些操作。常用的生命周期钩子函数包括 created、mounted、updated 和 destroyed。
<!DOCTYPE html>
<html lang="en">
<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">
<title>Document</title>
</head>
<body>
<div id="app">
<!--
生命(生 -> 死):
创建,销毁结束;
周期:
组件也有自己的生命周期:
创建过程;
创建前(beforeCreate)
vue实例还没有被创建,data里面的数据不可被调用;
也就是this.数据名 无效,页面仍然处于最原始的状态
创建后(created)
vue实例已经被创建,这个钩子函数是第一个能够访问到
data数据的钩子函数;页面仍然是最原始的状态,
虚拟dom还没有开始生成;
挂载过程;
挂载前(beforeMount)
虚拟dom已经生成,但是还没有渲染到页面上,
但是这个钩子函数,做任何的dom操作,都不奏效;
因为,在这个钩子函数里面删除的所有的dom,
都已经被虚拟dom拷贝了一份,
挂载后(mounted)
所有的dom都已经渲染到了页面上,dom是最新的;
页面也是最新的; 组件的初始化已经完成了
更新过程;
更新前(beforeUpdate)
页面更新前,数据是最新的,但是页面还是旧数据;
更新后(updated)
页面的是最新的,数据也是最新的;
销毁过程;
销毁前(beforeDestroy)
实例销毁前都会触发的事件;
销毁后(destroyed)
这个生命周期是最后一次,能够调用事件以及data里面数据的钩子函数
销毁后,页面的所有操作,都不在生效;
页面还在;
一般在这个生命周期,做一些,停止计时器,清空内存等操作;
称为 组件的四大生命周期;
八小份生命周期 都有自己的钩子(vue对象里面的函数)函数;
-->
<button @click="number = 456">
按钮
</button>
{{ number }}
<button @click="kill()">
销毁vue实例
</button>
</div>
<script src="./vue.js"></script>
<script>
// 实例化
const vm = new Vue({
// 挂载dom
el: '#app',
methods: {
kill(){
// 销毁生命周期
vm.$destroy()
}
},
data() {
return {
number: 123
}
},
// 创建前的生命周期
beforeCreate() {
console.log(this.number);
// 前端代码断点调试
debugger
},
// 创建后的生命周期
created() {
// 一般做些数据的请求操作,页面刚开始加载的时候
// 需要的数据
console.log(this.number);
debugger
},
// 挂载前的生命周期
beforeMount() {
document.querySelector('button').remove();
debugger
},
// 挂载后的生命周期
mounted() {
// 一般做一些,页面加载后需要进行的dom操作;
// vue一般不提倡直接控制dom
debugger
},
// 更新前
beforeUpdate() {
console.log(this.number);
debugger
},
// 更新后
updated() {
debugger
},
// 销毁前
beforeDestroy() {
debugger
},
// 销毁后
destroyed() {
debugger
},
})
</script>
</body>
</html>
组件
7. 组件:组件是 Vue 中的重要概念,它允许开发人员将页面分解为具有相同功能的小组件。组件可以嵌套和复用,使应用程序更易于维护和开发。
// 定义一个组件
Vue.component('my-component', {
data: function() {
return {
message: 'Hello, Vue!'
}
},
template: '<div>{{ message }}</div>'
})
// 在Vue应用程序中使用组件
new Vue({
el: '#app',
template: '<my-component></my-component>'
})
路由
8. 路由:Vue 提供了 vue-router 插件,用于管理应用程序的路由。路由可以帮助开发人员在不同的 URL 和组件之间进行导航和交互。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="vue.js路径"></script>
<script src="vue-router.js路径"></script>
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用 router-link 组件来导航. -->
<!-- 通过传入 `to` 属性指定链接. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
</div>
<script>
// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
routes // (缩写) 相当于 routes: routes
})
// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
router
}).$mount('#app')
// 现在,应用已经启动了!
</script>
</body>
</html>