直接上源码:
<template><div><Input v-model="inputVal" placeholder="Enter something..." @keyup.native="inputChange" /></div></template><script>import axios from 'axios'export default {computed: {...mapGetters(['stateCount', 'stateCategoryList'])},data () {return {inputVal: '',cancel: null,timer: 0,}},methods: {inputChange() {if(this.timer){clearTimeout(this.timer);}if(this.inputVal){this.timer = setTimeout(() => {this.remoteSearch(this.inputVal)}, 300)}else{// 输入框中的内容被删为空时触发,此时会清除之前展示的搜索结果this.remoteSearch(this.inputVal)}},// 监听输入框所触发的实时搜索组件用于向后端请求的方法// GET方式/*remoteSearch(keyword) {// 如果存在上一次请求,则取消上一次请求if(this.cancel){this.cancel('Cancel last request');}// 定义CancelToken,它是axios的一个属性,且是一个构造函数let CancelToken = axios.CancelToken;// 使用axios的get方法获取请求结果,在请求时需要传入cancelToken参数,// 实例化一个CancelToken,实例化后会生成一个类似于id的请求令牌,将它赋值给全局的cancel变量。axios.get('/api/aaaa', {params: { name: keyword },cancelToken: new CancelToken((c) => {this.cancel = c;})}).then((res) => {// 将请求的结果赋值给personData全局变量,用于展示搜索结果console.log(res, 'res')})}*/// POST方式remoteSearch(keyword) {// 如果存在上一次请求,则取消上一次请求if(this.cancel){this.cancel('Cancel last request');}axios.post('/api/aaaa', {kw:keyword}, {headers: {'Content-Type': 'application/x-www-form-urlencoded','Accept': 'application/json'},cancelToken: new axios.CancelToken((c) => {// An executor function receives a cancel function as a parameterthis.cancel = c;})}).then((res) => {// 在这里处理得到的数据console.log(res, 'res')}).catch((err) => {if (axios.isCancel(err)) {console.log('Rquest canceled', err.message); //请求如果被取消,这里是返回取消的message} else {//handle errorconsole.log(err);}})},}}</script>
