一、Vue.js的基础介绍
1.什么是Vue.js
-
渐进式:Vue.js 是一个渐进式框架,这意味着你可以逐步采用 Vue.js,并将其整合到现有的项目中。你可以选择仅使用 Vue.js 的核心功能,也可以结合使用官方提供的插件或社区中的第三方库来扩展其功能。
-
响应式:Vue.js 基于其响应式数据系统,通过使用数据绑定,将数据与 DOM 元素进行关联。当数据发生变化时,相关的 DOM 元素会自动更新。这种响应式机制大大简化了开发过程,提高了效率。
-
组件化:Vue.js 采用组件化的开发方式。组件是 Vue.js 应用程序的基本构建块,每个组件都有自己的模板、逻辑和样式。这种组件化的架构使得代码更容易维护、重用和测试。
-
虚拟 DOM:Vue.js 使用虚拟 DOM 技术来优化性能。虚拟 DOM 是一个轻量级的 JavaScript 对象,它在内存中表示真实的 DOM 结构。当数据发生变化时,Vue.js 会通过比较虚拟 DOM 的差异,只更新需要更改的部分,而不是整个页面。
-
模板语法:Vue.js 的模板语法类似于 HTML,但具有更强大的功能。它包括条件渲染、循环、事件处理等。模板语法还支持计算属性和过滤器,允许开发者对数据进行处理和转换。
-
生态系统:Vue.js 拥有庞大的生态系统,提供了许多有用的插件和工具。这些插件可以帮助开发者更快速地构建应用程序,并提供路由、状态管理、表单验证、UI 组件等功能。
总而言之,Vue.js 是一个灵活、高效且易于使用的 JavaScript 框架,它使开发者能够构建现代化的用户界面,并享受到组件化、响应式和虚拟 DOM 带来的便利。
2.Vue.js的特点
- 轻量级, 体积小是一个重要指标。Vue.js压缩后有只有20多kb(Angular压缩后56kb+,React压缩后44kb+)
- 移动优先。更适合移动端, 比如移动端的Touch事件
- 易上手,学习曲线平稳,文档齐全
- 开源,社区活跃度高
3.Vue.js的安装
vue.js官网:
Vue.jsVue.js - The Progressive JavaScript Frameworkhttps://v2.cn.vuejs.org/
也可以直接引入,版本号为:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
4.Vue.js入门
第一个vue实例:
-
创建一个HTML文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue学习</title>
</head>
<body>
</body>
</html>
- 引入Vue.js
<script src="../js/vue.js"></script>
- 创建根节点
<div id="app">
</div>
- 初始化Vue实例,绑定根节点
<script>
// 第三步:初始化vue实例,绑定根节点
var app= new Vue({
el: "#app",
data: {
msg: "第一个vue实例!",
},
})
</script>
- 完整代码
<!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>
// 第一步:引入vue.js
<script src="../js/vue.js"></script>
</head>
<body>
// 第二步:创建根节点
<div id="app">
</div>
<script>
// 第三步:初始化vue实例,绑定根节点
var app= new Vue({
el: "#app",
data: {
msg: "第一个vue实例!",
},
})
</script>
</body>
</html>
- vue实例常用到的构造选项
常用的构造选项:
选项 | 说明 |
el | 唯一根标签,决定Vue实例会管理哪一个DOM节点 |
data | Vue实例对应的数据对象 |
methods | 定义Vue实例的方法,可以在其他地方调用,也可以在指令中使用 |
computed | 定义Vue实例的计算属性,可以在其他地方调用,也可以在指令中使用,本质是一个属性而不是一个函数,在调用时不用加小括号 |
components | 定义Vue实例的子组件 |
filters | 定义Vue实例的过滤器 |
watch | 监听数据变化,观察和响应 Vue 实例上的数据变动 |
二、基础语法指令
1、v-if
v-if是Vue.js的条件语句,v-if指令用于条件性地渲染一块内容,这块内容只会在指令的表达式返回 true 值的时候被渲染。特别注意的是,v-if所关联的是Vue.js的动态变量。
v-if的使用一般有两个场景:
1.通过条件判断展示或者隐藏某个元素或者多个元素;
2.进行视图之间的切换。
<div id="app">
<p v-if="showMessage">{{ message }}</p>
<p v-else>Message is hidden.</p>
</div>
2、v-bind
v-bind指令用于实现单向动态数据绑定。
前面学习的v-text和v-html指令主要作用是将值插入到模板标签的内容当中。但是,除了标签内容需要动态来渲染外,某些标签的属性也希望动态来绑定,这时就可以使用v-bind动态绑定属性。
<div v-bind:id="dynamicId"></div>
//可以简写为
<div :id="dynamicId"></div>
3、v-on
v-on指令用来绑定事件监听器。在普通元素上,v-on指令可以监听原生的DOM事件(如click、dblclick、keyup、mouseover等)。
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<button v-on:click="sayHi">点我</button>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
message:'Hello World'
},
methods:{
sayHi:function(event){
//'this'在方法里面指向当前Vue实例
alert(this.message);
}
}
});
</script>
</body>
</html>
4、v-for
v-for是Vue.js的循环语句,当需要遍历数组或对象时,常用的就是列表渲染指令v-for, 它需要结合着in或者of来使用。
<div id="app">
<li v-for="(item,index) in items">
{{item.message}}---{{index}}
</li>
</div>
5、v-model
v-model指令主要用于实现表单元素和数据的双向绑定,通常用在表单类元素上(如input、select、textarea等)。所谓双向绑定,指的就是Vue实例中的data与其渲染的DOM元素上的内容保持一致,两者无论谁被改变,另一方也会相应的同步更新为相同的数据。
<template>
<div>
<input v-model="message" type="text">
<p>您输入的是:{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
message: ''
}
}
}
</script>
注:
v-model修饰符
v-model有3个修饰符,分别是lazy、number、trim
1、lazy
v-model默认是在input事件中同步输入框中的内容,也就是一旦数据发生改变,对应的data中的数据也会发生改变。如果使用lazy修饰符,可以让数据在失去焦点或者回车时才会更新。
<input type="text" placeholder="搜索" v-model.lazy='keyword' />
2、number
默认情况下,在输入框输入数字的时候,默认会把输入的内容当作字符串类型处理,如果加上number修饰符,就可以让你在输入数字的时候将内容转为number类型。
<input type="text" placeholder="搜索" v-model.number='keyword' />
3、trim
trim修饰符可以去除输入内容左右两边的空格。
<input type="text" placeholder="搜索" v-model.trim='keyword' />
三、组件
1.什么是组件
组件是前端开发中的重要概念,它代表着一个可独立使用、可重复利用的UI元素或模块。组件可以包含HTML、CSS和JavaScript代码,用于实现特定的功能或展示特定的内容。
2.为什么使用组件
- 1、方便重复使用
- 2、减少代码重复冗余
- 3、便于多人协同开发
- 4、有助于提高开发效率
- 5、提升整个项目的可维护性
3、组件基础
创建组件格式:
Vue.component(tagName, options)
tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:
<tagName></tagName>
以下是一个在Vue.js中使用组件的简单例子:
假设我们有一个名为 "HelloWorld" 的组件,它可以在页面上显示一条简单的问候语。首先,在您的Vue.js项目中创建一个名为 "HelloWorld.vue" 的文件
<template>
<div>
<h1>{{ greeting }}</h1>
</div>
</template>
<script>
export default {
data() {
return {
greeting: 'Hello, World!'
};
}
};
</script>
接下来,在您的父组件中使用 "HelloWorld" 组件。假设您的父组件名为 "App",在App.vue文件中:
<template>
<div>
<hello-world></hello-world>
</div>
</template>
<script>
import HelloWorld from './HelloWorld.vue';
export default {
components: {
HelloWorld
}
};
</script>
在这个例子中,我们在App.vue文件中引入了HelloWorld.vue组件,并在components对象中声明了该组件。然后,在模板中使用了 <hello-world></hello-world>
标签来引用并渲染 HelloWorld 组件。
最后,确保将App.vue作为根组件在Vue实例中进行渲染。在main.js文件中:
import Vue from 'vue';
import App from './App.vue';
new Vue({
render: h => h(App)
}).$mount('#app');
这样,当您运行Vue.js应用时,就会在页面上显示 "Hello, World!"。
四、vue-cli项目
vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板;
预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个估计项目就是脚手架,我们的开发更加的快速;
创建vue-cli项目:
vue init webpack myvue
说明:
- Project name:项目名称,默认回车即可
- Project description:项目描述,默认回车即可
- Author:项目作者,默认回车即可
- Install vue-router:是否安装vue-router,选择n不安装(后期需要再手动添加)
- Use ESLint to lint your code:是否使用ESLint做代码检查,选择n不安装(后期需要再手动添加)
- Set up unit tests:单元测试相关,选择n不安装(后期需要再手动添加)
- Setupe2etests with Nightwatch:单元测试相关,选择n不安装(后期需要再手动添加)
- Should we run npm install for you after the,project has been created:创建完成后直接初始化,选择n,我们手动执行;运行结果!
五、Axios异步通信(如何使用Axios)
1.什么是Axios
Axios 是一个基于 Promise 的 HTTP 客户端,用于发送 HTTP 请求。它可以在浏览器和 Node.js 环境中使用,并提供了一种简洁而强大的方式来与后端 API 进行通信。
Axios 具有以下特点和功能:
- 1、支持浏览器和 Node.js:Axios 可以同时在浏览器和 Node.js 环境中使用,这使得它成为一个通用的 HTTP 客户端工具。
- 2、支持 Promise:Axios 使用 Promise 来处理异步操作,这使得我们可以使用
then
和catch
方法来处理请求的结果。 - 3、提供简洁的 API:Axios 提供了一组简洁而直观的方法,例如
get
、post
、put
、delete
等,使得发送不同类型的请求变得非常容易。 - 4、自动转换数据:Axios 自动将响应数据转换为 JavaScript 对象,无需手动解析 JSON 数据。
- 5、拦截请求和响应:Axios 提供了拦截器(interceptors)机制,可以在请求发送前和响应返回后对其进行拦截和处理。
- 6、取消请求:Axios 支持取消请求的功能,可以在请求还未完成时取消请求,避免不必要的网络流量和资源浪费。
安装方法:
npm install axios
2、引入 Axios:
在需要使用的地方引入 Axios 模块:
import axios from 'axios';
3、发送 GET 请求:
使用 axios.get
方法发送一个 GET 请求,并处理返回的结果:
javascript
axios.get('/api/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
4、发送 POST 请求:
使用 axios.post
方法发送一个 POST 请求,并发送数据到服务器:
axios.post('/api/data', { name: 'John', age: 25 })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
5、设置请求头:
可以使用 axios.defaults.headers
对象设置全局的请求头信息,或者在每个请求中单独设置请求头:
// 全局设置
axios.defaults.headers.common['Authorization'] = 'Bearer token';
// 单个请求设置
axios.get('/api/data', { headers: { 'X-Requested-With': 'XMLHttpRequest' } })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
6、拦截请求和响应:
Axios 提供了拦截器(interceptors)来在请求发送前和响应返回后对其进行拦截和处理。可以使用 axios.interceptors.request
和 axios.interceptors.response
来设置请求和响应拦截器。
// 请求拦截器
axios.interceptors.request.use(config => {
// 在发送请求之前做些什么
return config;
}, error => {
// 对请求错误做些什么
return Promise.reject(error);
});
// 响应拦截器
axios.interceptors.response.use(response => {
// 对响应数据做些什么
return response;
}, error => {
// 对响应错误做些什么
return Promise.reject(error);
});
7、取消请求:
Axios 支持取消请求的功能,可以在请求还未完成时取消请求。可以使用 CancelToken
来创建一个取消令牌,并使用 cancel
方法来取消请求。
// 创建取消令牌
const source = axios.CancelToken.source();
// 发送请求并传入取消令牌
axios.get('/api/data', {
cancelToken: source.token
})
.then(response => {
console.log(response.data);
})
.catch(error => {
if (axios.isCancel(error)) {
console.log('请求已被取消', error.message);
} else {
console.error(error);
}
});
// 取消请求
source.cancel('请求取消的原因');
六、router路由
1.router路由是什么
Vue Router是Vue.js官方提供的路由管理器,用于构建单页面应用(SPA)。它通过将不同的组件映射到不同的URL,实现了前端路由的功能。
Vue Router的主要功能包括:
-
路由导航:Vue Router允许你定义不同的路由,并在用户点击链接或执行程序化导航时进行路由跳转。通过使用路由导航功能,你可以在不刷新页面的情况下,动态地加载和切换不同的组件。
-
嵌套路由:Vue Router支持嵌套路由,即一个路由可以包含子路由。这使得你可以更好地组织和管理你的应用程序结构,将不同的组件划分为更小、更模块化的部分。
-
路由参数:Vue Router允许你定义动态路由参数,通过在路由路径中使用占位符来接收参数。这样,你可以根据不同的参数值,显示和处理不同的内容。
-
路由守卫:Vue Router提供了路由守卫机制,可以在路由变化前后执行一些操作。你可以在路由跳转前进行权限验证、数据加载,也可以在路由跳转后进行一些清理操作。
-
路由懒加载:Vue Router支持路由懒加载,即按需加载路由对应的组件。这样可以优化应用的性能,减少初始加载时的资源压力。
2.router路由的安装
在项目中使用npm或yarn安装Vue Router,然后在main.js文件中导入和使用它:
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
// 创建路由实例并定义路由配置
const router = new VueRouter({
routes: [
// 定义路由规则
{ path: '/', component: Home },
{ path: '/about', component: About },
// ...
]
});
// 在Vue实例中使用路由
new Vue({
router,
render: h => h(App)
}).$mount('#app');
3.router路由使用
- 定义路由组件: 创建Vue组件,用于在不同的路由路径下进行渲染。在上面的代码示例中,
Home
和About
就是路由组件。// Home.vue <template> <div> <h1>Home Page</h1> <!-- 页面内容 --> </div> </template> // About.vue <template> <div> <h1>About Page</h1> <!-- 页面内容 --> </div> </template>
- 配置路由规则: 在路由实例的
routes
选项中定义路由规则,指定URL路径对应的组件。javascript const router = new VueRouter({ routes: [ { path: '/', component: Home }, // 根路径 { path: '/about', component: About }, // 关于页面 // ... ] });
- 在模板中使用路由链接: 使用
<router-link>
标签在模板中创建路由链接,实现页面之间的导航。<!-- 在模板中使用路由链接 --> <router-link to="/">Home</router-link> <router-link to="/about">About</router-link>
- 在组件中使用路由视图: 使用
<router-view>
标签在组件中定义路由视图的位置,当路由路径匹配时,对应的组件将在此处渲染。<!-- 在组件模板中使用路由视图 --> <template> <div> <!-- ...其他组件内容... --> <router-view></router-view> </div> </template>
-
5.路由导航和参数获取: 在组件内部,可以使用
$router
对象进行路由导航,也可以通过$route
对象获取当前路由的参数和信息。// 在组件方法中进行路由导航 methods: { goToAboutPage() { this.$router.push('/about'); } } // 访问当前路由的参数和信息 mounted() { console.log(this.$route.params.id); // 获取路由参数 console.log(this.$route.query.page); // 获取查询参数 }
以上是一些基本的路由使用示例,可以根据具体需求和业务逻辑进行进一步的配置和扩展。