目录
Vue是一款用于构建用户界面的渐进式JavaScript框架。
- 开发平台:VsCode
- 环境配置:node.js
安装node.js看这里 使用NVM实现多版本Node.js的版本共存和无缝切换_nodejs多版本共存_An1ong的博客-CSDN博客
JS提供的导入导出机制,可以实现按需导入。
假设现在有一个外部js文件,里面存放了两个函数,用来打印信息。
要是使用它就要在html里面引入它,然后调用。此时在这个html案例中它只用了其中一个函数,那么如果此时js文件有100个函数,也就是说此时导入了100个函数而其他99个函数压根就没有使用,这无疑使造成了很大的性能损失。
为此js提供了按需导入的功能,你使用什么就导入什么。改良后的代码案例如下
在方法前面加上export关键字,标识可以导出。或者在方法最底部export{ 方法1,方法2 }
在使用的地方加入import关键字导入
注意:import关键字一定要写在
语法:v-bind :属性名 = " 属性值 "
简化::属性名 = " 属性值 "
注:v-bind所绑定的数据,必须在data定义。
传统的html超链接
- <div id="app">
- <a href="https://blog.csdn.net/m0_56308072?spm=1000.2115.3001.5343">超链接An1onga>
- div>
在vue中使用v-bind达到同样的效果
-
-
-
-
同样都是达到条件才会生效,只不过其中元素v-show全部都渲染了,只是将不符合条件的元素隐藏了起来;而不符合条件的,v-if压根就没有渲染出来
作用:为标签绑定事件
语法:v-on:事件名="函数名"
可简写为@事件名="函数名"
像数据一样,方法也需要统一的放在methods里,固定格式
- createApp({
- data () {
- return {
- //定义数据
- }
- },
- methods: {
- //定义方法
- }
-
- }).mount("#app")
为两个按钮绑定事件
- <body>
- <div id="app">
- <button v-on:click="money">给你钱button>
- <button @click="love">给你爱button>
- div>
-
- <script type="module">
- import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
-
-
- createApp({
- data () {
- return {
- //定义数据
- }
- },
- methods: {
- //定义方法
- money:function(){
- alert("vx转账300块")
- },
- love:function(){
- alert("我爱你❤")
- }
- }
-
- }).mount("#app")
-
- script>
-
- body>
作用 :在表单元素上使用,双向数据绑定。可以方便的获取或设置表单项数据
语法:v-model=" 变量名 "
注:v-model中绑定的变量,必须在data中定义
案例:
我们在搜索框中会输入数据,这个数据前端可以接收到并存在变量中,之后又可以使用这个变量进行操作。当内部这个变量发生变化时,又会反过来影响到视图层,这就叫双向绑定。
- <body>
- <div id="app">
-
- <label for="category">文章分类:label>
- <input type="text" id="category" v-model="searchConditions.category" />
- <span>{{ searchConditions.category }}span>
- <br/>
-
- <label for="status">发布状态:label>
- <input type="text" id="status" v-model="searchConditions.state" />
- <span>{{ searchConditions.state }}span>
- <br/>
-
- <button>搜索button>
-
- <br/>
-
-
-
- div>
-
- <script type="module">
- import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
-
- createApp({
- //准备数据
- data() {
- return {
-
- searchConditions:{
- category:'',
- state:''
- }
- }).mount("#app");
- script>
- body>
生命周期有八个阶段,每个阶段会自动执行一个生命周期方法(钩子),让开发者有机会在特定的阶段执行自己的代码
其中,我们只需要记住mounted方法即可,一般用于在页面加载完毕时,发起异步请求,加载数据,渲染页面
注:mounted方法不在methods中也不在data中,它与他们是同级的,需要单独声明
对原生的Ajax进行了封装,简化书写,快速开发
注:method不要写成methods,vscode在编写代码的时候不会报错,在网页上看可就是一片红了
现在已经起了一个后端服务器(自己随便写一个有接口的springboot程序即可)
测试的接口为 获取文章列表
- <body>
-
- <script src="https://unpkg.com/axios/dist/axios.min.js">script>
-
- <script>
- // 发送请求
- axios({
- method:'get',
- url:'http://localhost:8888/article/getAll'
- }).then(result => {
- //成功的回调,result代表服务器响应的所有的数据,包含了响应header、body。
- //result.data 代表的是接口响应的核心数据
- console.log(result.data);
-
- }).catch(err => {
- //失败的回调
- console.log(err);
- })
- script>
- body>
F12打开网页控制台,就能看到我们在前端发起的请求得到了后端的响应并获取了数据
如果出现这个说明出现了跨域问题,需要在Controller上加上注解@CrossOrigin即可
详情解决看这篇https://blog.csdn.net/m0_56308072/article/details/130813590?spm=1001.2014.3001.5501
现在测试一个post请求,测试的接口为 新增文章
- <script src="https://unpkg.com/axios/dist/axios.min.js">script>
-
- <script>
- let article = {
- title:'明天会更好',
- category:'生活',
- time:'2000-01-01',
- state:'草稿'
- }
-
- axios({
- method:'post',
- url:'http://localhost:8888/article/add',
- data:article
- }).then(result => {
-
- console.log(result.data)
-
- }).catch(err => {
-
-
- })
-
- script>
为了方便起见。Axios已经为所有支持的请求方法提供了别名(推荐使用这种方式)
格式:axios.请求参数(url,[,data[,config]])
url是必带的参数,data与config是可选参数
将上面两个改成别名方式请求
- axios.get('http://localhost:8888/article/getAll')..then(result => {
- //成功的回调,result代表服务器响应的所有的数据,包含了响应header、body。
- //result.data 代表的是接口响应的核心数据
- console.log(result.data);
-
- }).catch(err => {
- //失败的回调
- console.log(err);
- });
- axios.post('http://localhost:8888/article/add',article).then(result => {
- console.log(result.data);
- }).catch({})
可以发现,使用这种方式来编写axios异步请求会更简便好用,也更推荐使用这种方式
将本篇博客所学的全部内容综合起来,做一个综合案例作为本篇博客的结尾,案例如下
首先进入页面,就要在mounted钩子函数里写axios请求以获取所有的文章数据。之后得到数据之后,用v-for将数据以此渲染在表格上。至于上面的搜索栏中要使用v-model双向绑定数据,搜索要用v-on绑定一个点击事件发起条件搜索请求,最终让页面只显示搜索的数据。
其中有几个注意点:由于我们上面是将axios和vue分开来讲的,在将他们综合到一起的时候必然会出现一些不同的事项。
html中引入了vue,那么就要将axios放入要执行方法里面,不能像之前一样单独放在外面,其次我们所要使用到一切数据都要先在data里面声明一下,createApp里面使用这些数据的时候要在前面加上this. 因为Vue的数据绑定是基于响应式系统的,通过this
关键字,才能够访问组件实例中的数据,确保对数据的修改能够触发视图的更新。
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Documenttitle>
- head>
- <body>
- <script src="https://unpkg.com/axios/dist/axios.min.js">script>
-
- <div id="app">
- 文章分类:<input type="text" v-model="searchList.category">
- 发布状态:<input type="text" v-model="searchList.state">
- <button @click="search">搜索button>
- <table>
- <tr>
- <td>标题td>
- <td>分类td>
- <td>时间td>
- <td>状态td>
- <td>操作td>
- tr>
-
- <tr v-for="item in arrayList " :key="item.id">
- <td>{{ item.title }}td>
- <td>{{ item.category }}td>
- <td>{{ item.time }}td>
- <td>{{ item.state }}td>
- <td>
- <button>编辑button>
- <button>删除button>
- td>
- tr>
- table>
- div>
-
- <script type="module">
- import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
-
- createApp({
- data() {
- return {
- arrayList : [],
- searchList:{
- category:'',
- state:''
- }
- };
- },
- methods: {
- search:function(){
- axios
- .get("http://localhost:8888/article/search",{
- params: {
- category: this.searchList.category,
- state: this.searchList.state
- }
- })
- .then(result =>{
-
- console.log(result.data);
- this.arrayList = result.data
-
- }).catch(err => {
-
- })
- }
- },
- mounted() {
- axios
- .get("http://localhost:8888/article/getAll")
- .then((result) => {
- console.log(result.data);
- this.arrayList = result.data;
- })
- .catch((err) => {});
- },
- }).mount("#app");
- script>
- body>
- html>