直接上源码:

    1. <template>
    2. <div>
    3. <Input v-model="inputVal" placeholder="Enter something..." @keyup.native="inputChange" />
    4. </div>
    5. </template>
    6. <script>
    7. import axios from 'axios'
    8. export default {
    9. computed: {
    10. ...mapGetters(['stateCount', 'stateCategoryList'])
    11. },
    12. data () {
    13. return {
    14. inputVal: '',
    15. cancel: null,
    16. timer: 0,
    17. }
    18. },
    19. methods: {
    20. inputChange() {
    21. if(this.timer){
    22. clearTimeout(this.timer);
    23. }
    24. if(this.inputVal){
    25. this.timer = setTimeout(() => {
    26. this.remoteSearch(this.inputVal)
    27. }, 300)
    28. }else{
    29. // 输入框中的内容被删为空时触发,此时会清除之前展示的搜索结果
    30. this.remoteSearch(this.inputVal)
    31. }
    32. },
    33. // 监听输入框所触发的实时搜索组件用于向后端请求的方法
    34. // GET方式
    35. /*remoteSearch(keyword) {
    36. // 如果存在上一次请求,则取消上一次请求
    37. if(this.cancel){
    38. this.cancel('Cancel last request');
    39. }
    40. // 定义CancelToken,它是axios的一个属性,且是一个构造函数
    41. let CancelToken = axios.CancelToken;
    42. // 使用axios的get方法获取请求结果,在请求时需要传入cancelToken参数,
    43. // 实例化一个CancelToken,实例化后会生成一个类似于id的请求令牌,将它赋值给全局的cancel变量。
    44. axios.get('/api/aaaa', {
    45. params: { name: keyword },
    46. cancelToken: new CancelToken((c) => {
    47. this.cancel = c;
    48. })
    49. }).then((res) => {
    50. // 将请求的结果赋值给personData全局变量,用于展示搜索结果
    51. console.log(res, 'res')
    52. })
    53. }*/
    54. // POST方式
    55. remoteSearch(keyword) {
    56. // 如果存在上一次请求,则取消上一次请求
    57. if(this.cancel){
    58. this.cancel('Cancel last request');
    59. }
    60. axios.post('/api/aaaa', {kw:keyword}, {
    61. headers: {
    62. 'Content-Type': 'application/x-www-form-urlencoded',
    63. 'Accept': 'application/json'
    64. },
    65. cancelToken: new axios.CancelToken((c) => {
    66. // An executor function receives a cancel function as a parameter
    67. this.cancel = c;
    68. })
    69. }).then((res) => {
    70. // 在这里处理得到的数据
    71. console.log(res, 'res')
    72. }).catch((err) => {
    73. if (axios.isCancel(err)) {
    74. console.log('Rquest canceled', err.message); //请求如果被取消,这里是返回取消的message
    75. } else {
    76. //handle error
    77. console.log(err);
    78. }
    79. })
    80. },
    81. }
    82. }
    83. </script>