element ui input el-autocomplete

2018-10-10  本文已影响0人  小蝴蝶_037a

产品大佬嫌select的远程搜索光标不能单个编辑,于是乎提了要把光标变成单个编辑而不是全选这个需求,我先参考同事的建议想到了手动在focus之后控制触发键盘右键,然后又想到修改element封装源代码,两个解决办法都不靠谱,转了一圈之后发现input也有远程搜索建议功能 ,又在fetch-suggestions参数上踩了很久的坑, 浪费一上午的时间 ,上代码吧 ,希望自己能长记性

html


<el-autocomplete

                            class="inline-input"

                            v-model="s_girard"

                            :fetch-suggestions="remoteMethodGirard"

                            placeholder="请输入款号"

                            :trigger-on-focus="false"

                            size="small"

                            :loading="loading"

                            id="1"

                            ></el-autocomplete>


js:

remoteMethodGirard(query,cb){

                    let results = [{}]

                    this.s_girard = query;

                    let self = this

                    this.loading = true;

                    $.ajax({

                        headers: {

                            'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('content')

                        },

                        type: 'get',

                        url: '/admin/get-giard-key',

                        data: {

                            girard:query

                        },

                        success:function(data){

                            if(data.result.success){

                                setTimeout(() => {

                                    self.loading = false;

                                    results = data.content

                                    for(i of results){

                                        i.value = i.girard

                                    }

                                        cb(results);

                                }, 200);

                        }

                        }

                        });

                },

值得注意的是:fetch-suggestions 返回参数是queryString, callback(上面的cb)通过调用 callback(data:[]) 来返回。

为什么选择input组件群下的el-autocomplete 而不是select下的远程搜索?

因为点击选中时可获取到选中行的附带信息即一个对象, 而select组件下的远程搜索只能选中点击的字符串.

最最需要注意:

后台获取的数组中每一个对象必须要有一个value字段, 因为autocomplete只识别value字段并在下拉列中显示(这个我真的ctmd找了很久的bug,感谢度娘,感谢大佬原文章https://blog.csdn.net/qq_37746973/article/details/78402812)

js也可以参考大佬的高端axios

//queryString 为在框中输入的值

//callback 回调函数,将处理好的数据推回

querySearchAsync(queryString, callback) {

    var list = [{}];

    //调用的后台接口

    let url = 后台接口地址 + queryString;

    //从后台获取到对象数组

    axios.get( url ).then((response)=>{

        //在这里为这个数组中每一个对象加一个value字段, 因为autocomplete只识别value字段并在下拉列中显示

        for(let i of response.data){

            i.value = i.想要展示的数据;  //将想要展示的数据作为value

        }

        list = response.data;

        callback(list);

    }).catch((error)=>{

    console.log(error);

    });

}

上一篇下一篇

猜你喜欢

热点阅读