Vue_Study入门七

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: Get新知识: axios 的使用axios 是一个基于promise 的网络请求库,可以用于浏览器和node.js。从node.js中创建http请求支持Promise API拦截请求和响应转换请求数据和响应数据取消请求自动转换JSON数据客户端支持防御XSRF浏览器中创建XMLHttpRequests​ 简单使用<script type="text/javascript" src="....

Get新知识:

axios 的使用

axios 是一个基于promise 的网络请求库,可以用于浏览器和node.js。

  • 从node.js中创建http请求
  • 支持Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御XSRF
  • 浏览器中创建XMLHttpRequests

简单使用

<script type="text/javascript" src="../vue_js/axios.min.js"></script>
<script type="text/javascript">
    // data 是axios 提供的api方法,必须通过data 方法获取到接口的具体数据
    axios.get('http://127.0.0.1:5000/api/data/demo').then(function(data){
   
   
        console.log(data.data);
    })
    .catch(function (error) {
   
   
        console.log(error);
    });
</script>

axios对象调用get方法,.then()成功回调,.catch()失败回调。
get方法也可以把url中的参数提出来单独放到一个对象中。

axios 传递参数

get 传参

image.png

注意的是 使用params 和 ?id=xxx 传递参数的方式,在后台接受参数时一个是 通过 params 来获取 一个是 通过query 来获取。

delete 传参

image.png

delete 的传参跟 get 基本没什么区别。

post 请求

axios.post('/user', {
   
   
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
   
   
    console.log(response);
  })
  .catch(function (error) {
   
   
    console.log(error);
  });

上面的请求方式是将数据以 json 格式将数据发送到后端,axios 也可以将数据以普通的 表单数据 提交到后台。

var params = new URLSearchParams();
params.append('uanme', 'zhangsan');
params.append('pwd', '111');
axios.post('http://localhost:5000/api/demo', params)
.then(function(ret) {
   
   
    console.log(ret.data);
})

通过上面的方式则是将数据以普通 表单数据 提交到后端。
put 传参跟post 传参以上类似。
image.png

拦截器

axiso 提供了请求拦截器 即 在每个请求发出前都会被请求拦截器捕获并进行一些操作,以及 响应拦截器 即 每个请求的响应在执行then或catch 前拦截并进行一些操作。

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
   
   
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
   
   
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 响应拦截器
axios.interceptors.response.use(function(res) {
   
   
  // 在响应返回到程序前一些操作
    var data = res.data;
    return data;
}, function(error){
   
   
    console.log(error);
});

创建axios 的实例对象

可以使用自定义配置新建一个 axios 实例axios.create([config])

//create创建一个新的实例对象
var instance = axios.create({
   
   
   url: 'http://jsonplaceholder.typicode.com/users',
   imeout: 3000,
   method: 'post'
});
//即可调用方法,和axios实例同
instance.get('http://jsonplaceholder.typicode.com/users').then(Response=>{
   
   
   console.log(Response);
});

全部的配置信息

{
   
   
  // `url` 是用于请求的服务器 URL
  url: '/user',
  // `method` 是创建请求时使用的方法
  method: 'get', // 默认是 get
  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: 'https://some-domain.com/api/',
  // `transformRequest` 允许在向服务器发送前,修改请求数据
  // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  transformRequest: [function (data) {
   
   
    // 对 data 进行任意转换处理
    return data;
  }],
  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [function (data) {
   
   
    // 对 data 进行任意转换处理
    return data;
  }],
  // `headers` 是即将被发送的自定义请求头
  headers: {
   
   'X-Requested-With': 'XMLHttpRequest'},
  // `params` 是即将与请求一起发送的 URL 参数
  // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
  params: {
   
   
    ID: 12345
  },
  // `paramsSerializer` 是一个负责 `params` 序列化的函数
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function(params) {
   
   
    return Qs.stringify(params, {
   
   arrayFormat: 'brackets'})
  },
  // `data` 是作为请求主体被发送的数据
  // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
  // 在没有设置 `transformRequest` 时,必须是以下类型之一:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - 浏览器专属:FormData, File, Blob
  // - Node 专属: Stream
  data: {
   
   
    firstName: 'Fred'
  },
  // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
  // 如果请求话费了超过 `timeout` 的时间,请求将被中断
  timeout: 1000,
  // `withCredentials` 表示跨域请求时是否需要使用凭证
  withCredentials: false, // 默认的
  // `adapter` 允许自定义处理请求,以使测试更轻松
  // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
  adapter: function (config) {
   
   
    /* ... */
  },
  // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
  // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
  auth: {
   
   
    username: 'janedoe',
    password: 's00pers3cret'
  },
  // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  responseType: 'json', // 默认的
  // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
  xsrfCookieName: 'XSRF-TOKEN', // default
  // `xsrfHeaderName` 是承载 xsrf token 的值的 HTTP 头的名称
  xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的
  // `onUploadProgress` 允许为上传处理进度事件
  onUploadProgress: function (progressEvent) {
   
   
    // 对原生进度事件的处理
  },

async/await 语法

使用 async 和 await 可以进行异步的操作,就可以使用async 和 await 进行异步请求。

简单使用

image.png

多个异步请求处理。

image.png

请求的顺序会按照定义的await 顺序进行执行。

vue-router 的使用

Vue Router 是 vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

vue-router 的使用步骤

image.png

vue-router 的简单使用

<!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>demo_06</title>
</head>

<body>
    <div id="app">
          // 添加路由链接,也就是添加router-link 标签,并且为to 属性绑定赋值
        <router-link to="/user">User</router-link>
        <router-link to="/register">Register</router-link>
                // 添加路由填充位,即定义router-view
        <router-view></router-view>
    </div>
</body>
// 1. 引入相关库文件,注意 vue.js 的引入要先于vue-router.js
// 因为vue-router.js 有些内部需要依赖于vue.js
<script type="text/javascript" src="../vue_js/vue.js"></script>
<script type="text/javascript" src="../vue_js/vue-router.js"></script>
<script type="text/javascript">
  // 定义路由组件,这些组件将被渲染
    const User = {
    
    
        template: '<h1>User 组件</h1>'
    };

    const Register = {
    
    
        template: '<h1>Register 组件</h1>'
    };
    // 配置路由规则并创建路由实例 即 新建VueRouter 实例对象,并且为routes 属性进行赋值
  // routes 中需要配置全部的路由信息,path 中的值需要和路由链接的to属性值对应保持一致,componment则是组件名
    const router = new VueRouter({
    
    
        routes: [{
    
    
                path: '/user',
                component: User
            },
            {
    
    
                path: '/register',
                component: Register
            }
        ]
    });
    // 将路由挂载到Vue 跟实例上, 将为vue 的router 属性赋值VueRouter 实例对象。
    const vm = new Vue({
    
    
        el: "#app",
        data: {
    
    },
        router: router
    });
</script>

</html>

路由重定向

重定向,只需要在实例化VueRouter 对象的routes 属性配置新的route 信息,path 选择原始路径,使用redirect 代替componment 指定跳转之后的路径。
image.png

嵌套路由

嵌套路由可用于满足嵌套组件的路由解决。

    const Register = {
   
   
        template: `
        <div>
            <h1>Register 组件</h1>
            <hr/>
            <!-- 子路由链接 -->
            <router-link to="/register/tab1">tab1</router-link>
            <router-link to="/register/tab2">tab2</router-link>

            <router-view></router-view>
        </div>
        `
    };

    const Tab1 = {
   
   
        template: "<h3>Tab1 组件</h3>"
    }

    const Tab2 = {
   
   
        template: "<h3>Tab2 组件</h3>"
    }

    const router = new VueRouter({
   
   
        routes: [{
   
   
                path: '/user',
                component: User
            },
            {
   
   
                path: '/register',
                component: Register,
                children: [{
   
   
                    path: '/register/tab1',
                    component: Tab1
                },
                {
   
   
                    path: '/register/tab2',
                    component: Tab2
                }
            ]
            },
            {
   
   
                path: '/',
                redircet: '/user'
            }
        ]
    });

嵌套路由 主要就是需要先定义好 子组件,并且在父组件 中定义好 子组件的路由链接 和 路由填充位。
然后再 配置路由规则时 通过父组件的children 的属性来 配置子组件的路由规则即可。

动态匹配路由

对于一些内容的路由链接,如商品列表页的商品链接的路由处理,要一条一条的定义书写很麻烦,所以可以通过动态匹配路由解决。
示例:
image.png

如上图,存在多个路由信息相似,类似列表页信息
image.png

路由规则的定义,使用动态匹配,使用:xxx 表明这里绑定的是动态的数值。就避免了按个书写的麻烦。

获取路由动态匹配的参数,如下图。
image.png

获取动态匹配的参数可以通过 props 获取

  1. props : true 获取

image.png

  1. props : {xx:xx} 获取

image.png

  1. props : function(){} 获取

image.png

命名路由

就是为路由命名,通过名称来确定路由转发。
image.png

目录
相关文章
|
3月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
2月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
2月前
|
JavaScript API 开发者
十分钟 带你强势入门 vue3
十分钟 带你强势入门 vue3
66 1
|
2月前
|
JavaScript
vue3完整教程从入门到精通(新人必学2,搭建项目)
本文介绍了如何在Vue 3项目中安装并验证Element Plus UI框架,包括使用npm安装Element Plus、在main.js中引入并使用该框架,以及在App.vue中添加一个按钮组件来测试Element Plus是否成功安装。
89 0
vue3完整教程从入门到精通(新人必学2,搭建项目)
|
2月前
|
JavaScript Java CDN
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
本文提供了Vue 3从入门到精通的完整教程,涵盖了创建Vue应用、通过CDN使用Vue、定义网站以及使用ES模块构建版本的步骤和示例代码。
330 0
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
|
2月前
|
JavaScript 前端开发 C#
从入门到放弃,我们为何从 Blazor 回到 Vue
【10月更文挑战第29天】在前端开发中,许多开发者从尝试新技术 Blazor 最终回到熟悉的 Vue。主要原因包括:1) Blazor 学习曲线陡峭,Vue 上手容易;2) Vue 开发工具成熟,开发效率高;3) Vue 性能优异,优化简单;4) Vue 社区庞大,生态丰富;5) 项目需求和团队协作更适配 Vue。选择技术栈需综合考虑多方面因素。
116 0
|
4月前
|
缓存 监控 JavaScript
vue从安装到熟练 2022流畅无痛版(第一季:入门篇)
该文章是《vue从安装到熟练 2022流畅无痛版》系列的第一季入门篇,介绍了Vue的基本概念、环境配置、项目创建与运行,并通过修改HelloWorld.vue和App.vue文件内容展示了如何在页面上显示"Hello World",最后还提供了Vue官方文档链接和介绍了Vue的常用内置指令和模板语法等基础知识。
vue从安装到熟练 2022流畅无痛版(第一季:入门篇)
|
4月前
|
JavaScript 前端开发
vue入门
vue入门
32 2
vue入门
|
7月前
|
JavaScript 开发者 UED
Vue入门到关门之第三方框架elementui
ElementUI是一个基于Vue.js的组件库,包含丰富的UI组件如按钮、表格,强调易用性、响应式设计和可自定义主题。适用于快速构建现代化Web应用。官网:[Element.eleme.cn](https://element.eleme.cn/#/zh-CN)。安装使用时,需在项目中导入ElementUI和其样式文件。
74 0
|
4月前
|
JavaScript 前端开发 API
Vue3入门
Vue3入门
33 0
下一篇
DataWorks