(全网最详细教程)深入探索 Vue 与 Axios:构建高效 Web 应用的关键技术
目录
一、Vue.js 介绍
Vue 具有以下特点:
二、Vue 入门程序
1. 引入 Vue
2. 代码解释
三、Vue 常用指令 - v-for
1. 遍历数组
2. 遍历对象
四、Vue 常用指令 - v-bind
1. 绑定单个属性
2. 绑定多个属性
五、Vue 常用指令 - v-if & v-show
1. v-if
2. v-show
3. 区别
六、Vue 常用指令 - v-model & v-on
1. v-model
2. v-on
七、Ajax 介绍
八、Ajax - Axios 入门
1. 引入 Axios
2. 代码解释
九、Axios - Axios 请求方式别名 & 案例
1. 请求方式别名
2. 案例
十、Axios - async/await
代码解释
十一、Axios 案例(Vue 生命周期)
代码解释
一、Vue.js 介绍
Vue.js 是一款用于构建用户界面的渐进式 JavaScript 框架。它由尤雨溪开发,于 2014 年发布,旨在通过尽可能简单的 API 实现响应式数据绑定和组合的视图组件。通俗来讲,在传统的网页开发中,当数据发生变化时,我们需要手动去更新页面上显示的内容。而 Vue.js 采用了响应式的原理,只要数据改变了,与之绑定的页面元素就会自动更新,大大减少了我们手动操作 DOM 的工作量。
Vue 的核心库只关注视图层,这意味着它主要负责处理页面上如何展示数据,而不涉及过多的业务逻辑。这种设计使得 Vue 不仅易于上手,对于初学者来说,很容易理解和掌握其基本用法;还便于与第三方库或既有项目整合。当项目逐渐变得复杂,需要引入更多功能时,我们可以轻松地将 Vue 与其他工具结合使用。同时,当与现代化的工具链以及各种支持类库结合使用时,Vue 也能为复杂的单页面应用提供驱动,满足大型项目的开发需求。
Vue 具有以下特点:
- 响应式数据绑定:如前面所说,Vue 采用响应式原理,当数据发生变化时,与之绑定的 DOM 会自动更新。例如,我们在代码中定义了一个变量,这个变量显示在页面上,当我们改变这个变量的值时,页面上显示的内容会立刻更新,无需手动去修改页面元素。
- 组件化开发:将页面拆分成多个小的、可复用的组件,提高代码的可维护性和复用性。就像搭积木一样,我们可以把一个大的页面拆分成多个小的组件,每个组件负责一个特定的功能。当我们需要在其他地方使用相同功能时,直接复用这个组件即可,避免了重复编写代码。
- 轻量级:体积小,加载速度快,对性能影响较小。在如今追求快速响应的互联网时代,页面加载速度至关重要。Vue 的轻量级特性使得它在加载时不会给用户带来过多的等待时间。
- 生态系统丰富:有大量的插件和工具,如 Vue Router、Vuex 等,可用于构建复杂的应用。这些插件和工具就像是 Vue 的 “武器库”,当我们需要实现路由管理、状态管理等功能时,直接从 “武器库” 中选取合适的工具即可。
二、Vue 入门程序
1. 引入 Vue
可以通过 CDN 或 npm 引入 Vue。这里以 CDN 为例:
Vue 入门 {{ message }} var app = new Vue({ el: '#app', data: { message: 'Hello, Vue!' } })
2. 代码解释
在这个入门程序中,我们首先在 标签里通过 标签引入了 Vue 的 CDN 链接,这样浏览器就可以从指定的地址加载 Vue 库。
在 标签里,有一个 元素,它的 id 是 app,里面使用了 {{ message }} 这样的插值表达式。这个表达式的作用是将 Vue 实例中 data 对象里的 message 属性的值显示在页面上。
接下来是 标签里的 JavaScript 代码。我们创建了一个 Vue 实例,使用 new Vue() 这样的语法。在创建实例时,传入了一个对象,这个对象有两个重要的属性:
- el:指定 Vue 实例挂载的 DOM 元素。这里的值是 #app,表示将这个 Vue 实例挂载到 id 为 app 的 元素上。也就是说,这个 Vue 实例会控制这个 元素及其子元素的显示和交互。
- data:定义 Vue 实例的数据对象,其中的属性可以在模板中使用。在这个例子里,data 对象有一个 message 属性,值是 'Hello, Vue!',这个值会通过插值表达式显示在页面上。
三、Vue 常用指令 - v-for
v-for 指令用于基于一个数组或对象来渲染一个列表。
1. 遍历数组
v-for 遍历数组
- {{ item }}
在这个例子中,我们有一个 items 数组,里面包含了三个水果名称。在 HTML 模板里,使用了 v-for 指令,v-for="item in items" 的意思是,对于 items 数组中的每一个元素,都会创建一个
- 元素。item 是一个临时变量,代表当前遍历到的数组元素。然后通过 {{ item }} 插值表达式将这个元素的值显示在
- 元素中。最终,页面上会显示一个包含三个列表项的无序列表,分别是 Apple、Banana 和 Cherry。
2. 遍历对象
v-for 遍历对象
- {{ key }}: {{ value }}
当使用 v-for 遍历对象时,语法稍有不同。v-for="(value, key) in user" 表示对于 user 对象中的每一个属性,都会创建一个
- 元素。value 是属性的值,key 是属性的名称。在这个例子中,user 对象有三个属性,分别是 name、age 和 city。通过 {{ key }}: {{ value }} 插值表达式,会将属性名和属性值以 属性名: 属性值 的形式显示在
- 元素中。最终页面上会显示一个包含三个列表项的无序列表,分别是 name: John、age: 30 和 city: New York。
四、Vue 常用指令 - v-bind
v-bind 指令用于动态绑定 HTML 属性。可以缩写为 :。
1. 绑定单个属性
v-bind 绑定属性
new Vue({ el: '#app', data: { imageUrl: 'https://vuejs.org/images/logo.png' } })
在这个例子中,我们使用 v-bind 的缩写形式 : 来绑定
元素的 src 属性。imageUrl 是 Vue 实例 data 对象中的一个属性,它的值是一个图片的 URL。通过 :src="imageUrl",我们将 imageUrl 的值动态地赋给了 src 属性。这样,当 imageUrl 的值发生变化时,页面上显示的图片也会相应地改变。
2. 绑定多个属性
v-bind 绑定多个属性 new Vue({ el: '#app', data: { divAttrs: { id: 'myDiv', class: 'myClass' } } })
当需要绑定多个属性时,我们可以将这些属性放在一个对象中。在这个例子中,divAttrs 是一个对象,包含了 id 和 class 两个属性。通过 v-bind="divAttrs",我们将 divAttrs 对象中的所有属性都绑定到了 元素上。这样, 元素就会具有 id="myDiv" 和 的属性。
五、Vue 常用指令 - v-if & v-show
1. v-if
v-if 是一个条件渲染指令,根据表达式的值来决定是否渲染元素。如果表达式的值为 false,元素将不会被渲染到 DOM 中。
v-if 指令
This is a message.
Toggle Message new Vue({ el: '#app', data: { showMessage: true }, methods: { toggleMessage() { this.showMessage = !this.showMessage; } } })在这个例子中,p 标签使用了 v-if="showMessage" 指令。showMessage 是 Vue 实例 data 对象中的一个布尔值属性。当 showMessage 为 true 时,p 标签会被渲染到页面上;当 showMessage 为 false 时,p 标签不会出现在 DOM 中。页面上还有一个按钮,点击按钮会触发 toggleMessage 方法,这个方法会将 showMessage 的值取反,从而实现显示和隐藏消息的切换。
2. v-show
v-show 也是用于条件显示元素,但它只是通过 CSS 的 display 属性来控制元素的显示与隐藏,元素始终会被渲染到 DOM 中。
v-show 指令
This is a message.
Toggle Message new Vue({ el: '#app', data: { showMessage: true }, methods: { toggleMessage() { this.showMessage = !this.showMessage; } } })这个例子和 v-if 的例子很相似,只是将 v-if 换成了 v-show。当 showMessage 为 true 时,p 标签会显示出来;当 showMessage 为 false 时,p 标签的 display 属性会被设置为 none,从而隐藏起来,但它仍然存在于 DOM 中。
3. 区别
- v-if 有更高的切换开销,因为它会真正地添加或移除元素。每次 v-if 的条件发生变化时,Vue 都需要重新创建或销毁元素,这涉及到 DOM 的操作,会消耗一定的性能。
- v-show 有更高的初始渲染开销,因为元素始终存在于 DOM 中。在页面加载时,v-show 对应的元素就已经被渲染到 DOM 中,只是通过 CSS 来控制显示或隐藏。
- 如果需要频繁切换显示状态,使用 v-show 更合适;如果在运行时条件很少改变,使用 v-if 更合适。例如,一个页面上的提示信息,可能会根据用户的操作频繁显示和隐藏,这时使用 v-show 更合适;而一个页面上的某个模块,只有在特定条件下才会显示,并且这个条件很少改变,使用 v-if 更合适。
六、Vue 常用指令 - v-model & v-on
1. v-model
v-model 指令用于在表单元素(如 input、textarea、select)上创建双向数据绑定。
v-model 指令
{{ message }}
new Vue({ el: '#app', data: { message: '' } })在这个例子中,input 标签使用了 v-model="message" 指令。message 是 Vue 实例 data 对象中的一个属性。当用户在 input 框中输入内容时,message 属性的值会自动更新;反过来,当 message 属性的值在代码中被修改时,input 框中的内容也会相应地改变。同时,通过 {{ message }} 插值表达式,message 的值会显示在 p 标签中,这样我们可以直观地看到数据的双向绑定效果。
2. v-on
v-on 指令用于监听 DOM 事件,可以缩写为 @。
v-on 指令 Say Hello new Vue({ el: '#app', methods: { sayHello() { alert('Hello!'); } } })
在这个例子中,button 标签使用了 @click="sayHello" 指令,这是 von:click="sayHello" 的缩写形式。sayHello 是 Vue 实例 methods 对象中的一个方法。当用户点击按钮时,会触发 sayHello 方法,这个方法会弹出一个包含 Hello! 信息的提示框。
七、Ajax 介绍
Ajax(Asynchronous JavaScript and XML)即异步的 JavaScript 和 XML,是一种在不刷新整个页面的情况下,与服务器进行异步通信并更新部分网页的技术。在传统的网页交互中,当我们提交一个表单或者请求一些数据时,整个页面会重新加载,这会给用户带来不好的体验。而 Ajax 技术允许我们在后台与服务器进行少量数据交换,使网页实现异步更新。也就是说,我们可以在不重新加载整个网页的情况下,更新部分网页内容,比如在一个页面上动态加载新的文章列表、实时更新评论等。
虽然名字中包含 XML,但现在更多地使用 JSON 作为数据交换格式。JSON 具有轻量级、易于解析和生成的特点,更适合在现代 Web 开发中使用。Ajax 的核心是 XMLHttpRequest 对象,它是浏览器提供的一个用于与服务器进行异步通信的 API。现代浏览器也支持使用 fetch API 来实现类似的功能。
八、Ajax - Axios 入门
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它具有以下特点:
- 支持 Promise API:可以使用 async/await 进行异步操作。Promise 是 JavaScript 中处理异步操作的一种机制,async/await 是基于 Promise 的语法糖,使用它们可以让异步代码看起来更像同步代码,提高代码的可读性和可维护性。
- 拦截请求和响应:可以在请求发送前和响应返回后进行拦截处理。例如,我们可以在请求发送前添加一些请求头信息,或者在响应返回后对数据进行统一的处理。
- 转换请求和响应数据:可以对请求和响应的数据进行转换。比如,我们可以将请求数据转换为 JSON 格式,或者将响应数据进行格式化处理。
- 取消请求:可以取消请求。在某些情况下,比如用户快速切换页面,之前的请求可能就不需要了,这时可以使用 Axios 提供的取消请求功能。
- 自动转换 JSON 数据:可以自动将响应数据转换为 JSON 格式。这样我们在处理响应数据时就不需要手动进行 JSON 解析了。
1. 引入 Axios
可以通过 CDN 或 npm 引入 Axios。这里以 CDN 为例:
Axios 入门 axios.get('https://jsonplaceholder.typicode.com/todos/1') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); });
2. 代码解释
在这个例子中,我们首先在 标签里通过 标签引入了 Axios 的 CDN 链接。然后在 标签里的 代码中,使用 axios.get 方法发送了一个 GET 请求,请求的地址是 https://jsonplaceholder.typicode.com/todos/1,这是一个公共的测试 API,会返回一个待办事项的数据。
axios.get 方法返回一个 Promise 对象,我们可以使用 then 方法来处理请求成功的响应,then 方法的回调函数接收一个 response 参数,response.data 就是服务器返回的数据。我们将这个数据打印到控制台。
如果请求过程中出现错误,会触发 catch 方法,catch 方法的回调函数接收一个 error 参数,我们将这个错误信息打印到控制台。
九、Axios - Axios 请求方式别名 & 案例
1. 请求方式别名
Axios 提供了以下请求方式别名:
- axios.request(config):这是一个通用的请求方法,可以通过配置对象来指定请求的方式、URL、数据等信息。
- axios.get(url[, config]):用于发送 GET 请求,通常用于获取数据。
- axios.delete(url[, config]):用于发送 DELETE 请求,通常用于删除服务器上的资源。
- axios.head(url[, config]):用于发送 HEAD 请求,与 GET 请求类似,但只返回响应头,不返回响应体。
- axios.options(url[, config]):用于发送 OPTIONS 请求,用于获取服务器支持的请求方法等信息。
- axios.post(url[, data[, config]]):用于发送 POST 请求,通常用于向服务器提交数据。
- axios.put(url[, data[, config]]):用于发送 PUT 请求,通常用于更新服务器上的资源。
- axios.patch(url[, data[, config]]):用于发送 PATCH 请求,也是用于更新服务器上的资源,但与 PUT 不同的是,PATCH 通常只更新部分数据。
2. 案例
Axios 请求方式别名案例 // GET 请求 axios.get('https://jsonplaceholder.typicode.com/todos/1') .then(response => { console.log('GET 请求结果:', response.data); }) .catch(error => { console.error('GET 请求错误:', error); }); // POST 请求 axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'foo', body: 'bar', userId: 1 }) .then(response => { console.log('POST 请求结果:', response.data); }) .catch(error => { console.error('POST 请求错误:', error); });
在这个案例中,我们分别使用了 axios.get 和 axios.post 方法发送了 GET 请求和 POST 请求。
GET 请求的目的是获取一个待办事项的数据,请求成功后,将响应数据打印到控制台;如果请求失败,将错误信息打印到控制台。
POST 请求的目的是向服务器提交一篇新的文章数据,我们在 axios.post 方法的第二个参数中传入了一个包含文章标题、内容和用户 ID 的对象。请求成功后,将响应数据打印到控制台;如果请求失败,将错误信息打印到控制台。
十、Axios - async/await
async/await 是 ES2017 引入的异步编程语法糖,它基于 Promise 实现,可以让异步代码看起来更像同步代码。
Axios async/await async function fetchData() { try { const response = await axios.get('https://jsonplaceholder.typicode.com/todos/1'); console.log('异步请求结果:', response.data); } catch (error) { console.error('异步请求错误:', error); } } fetchData();
代码解释
在这个例子中,我们定义了一个异步函数 fetchData,使用了 async 关键字。在异步函数内部,使用 await 关键字等待 axios.get 方法返回的 Promise 对象。await 会暂停函数的执行,直到 Promise 被解决(resolved)或被拒绝(rejected)。
当 Promise 被解决时,await 会返回 Promise 的结果,这里就是服务器返回的响应对象。我们将响应对象赋值给 response 变量,然后将响应数据打印到控制台。
如果 Promise 被拒绝,会抛出一个错误,我们使用 try...catch 语句来捕获这个错误,并将错误信息打印到控制台。
最后,我们调用了 fetchData 函数来执行异步请求。
十一、Axios 案例(Vue 生命周期)
Axios 案例(Vue 生命周期)
- {{ todo.title }}
代码解释
在这个案例中,我们结合了 Vue 和 Axios 来实现一个动态加载待办事项列表的功能。
首先,在 标签里引入了 Vue 和 Axios 的 CDN 链接。
在 标签里,有一个 id 为 app 的 元素,里面有一个无序列表,使用 v-for 指令遍历 todos 数组,将每个待办事项的标题显示在列表项中。
接下来是 标签里的 JavaScript 代码。我们创建了一个 Vue 实例,在这个实例中:
- data 对象定义了一个 todos 数组,初始值为空。
- mounted 是 Vue 的生命周期钩子函数,在实例挂载后调用。在这个钩子函数中,我们调用了 fetchTodos 方法。
- methods 对象定义了 fetchTodos 方法,这是一个异步函数。在这个方法中,使用 await 关键字等待 axios.get 方法返回的 Promise 对象,当请求成功后,将服务器返回的待办事项数据赋值给 todos 数组。由于 Vue 的响应式原理,当 todos 数组的值发生变化时,页面上的列表会自动更新,显示新的待办事项列表。如果请求过程中出现错误,会捕获错误并将错误信息打印到控制台。
通过以上内容,你可以全面了解 Vue.js 和 Axios 的基本使用,从入门到实战,掌握如何构建交互式的前端应用。