# 国籍选择器

# 一、ml-country-selector是什么?

"ml-country-selector基于typescript实现和rollup打包,是一款开箱即用的选择国家名称前端组件,支持自定义国家名称数据

# 二、使用步骤

# 1.引入库

代码如下(示例):

npm i ml-country-selector -S
1

注意如果是npm方式就需要这样引入

import { mlCountrySelector } from 'ml-country-selector';
1

# 2.初始化使用

在需要的地方初始化使用,demo如下: 注意必须提供一个容器元素

代码如下(示例):

            let instance = mlCountrySelector.initializationFn({
                el: '#container',
                // 初始化请求类型,建议true
                isHttps: true,
                // 是否开启input动画伸缩功能 即“清除”按钮 强烈建议开启
                animaInput: true,
                // 自定义按钮文案,仅animaInput开启时候生效
                inputOutBtnTxt: '取消',
                // input没有搜到任何内容时 失去焦点立即重制所有状态
                immediatelyReset: false,
                // input搜索是否全局匹配
                globalSearchWord: false,
                // 是否支持拼音搜索,默认false(非全局匹配模式才生效)
                supportEnSearch: false,
                // 是否开启列表独立滚动,搜索区域固定
                fixedAndScroll: true,
                // 自定义滚动区域高度px fixedAndScroll=true有效
                scrollviewHeight: null,
                // 搜索数据源是否需要包含“推荐”部分数据
                serachDataIncludeRecommend: false,
                // 是否在选中国家后重置状态
                selectCountryAfterReset: false,
                // 当使用input搜索结果为0时候是否也显示国家列表现,如果不显示就会是空状态视图, 默认false不显示
                searchEmptyShowCountryList: false,
                // 搜索输入最大字符数 默认值20
                searchInputMaxNum: 10,
                // 是否开启连续匹配模式下的匹配独立样式 默认false 且globalSearchWord=false生效
                searchWordAddStyle: true,
                // 是否滚动出现侧边提示大气泡
                scrollBodyBubble: true,
                // 是否左侧列表区域字母吸顶(仅当fixedAndScroll=true时候有效)
                leftTipTop: true,
                // 侧边栏跟随监听偏移值 PX
                leftActionSpan: 163,
                // input类型 默认值text,如果useServerSeach=true时建议值search
                inputType: 'text',
                // 是否启用server搜索和推荐
                useServerSeach: false,
                // 自定义搜索接口(当useServerSeach=true时生效) GET请求方式
                serverSeaAPI: '',
                // 自定义推荐接口(当useServerSeach=true时生效) GET请求方式
                serverTjAPI: '',
                // 为了提供更好的兼容性可以开启载入polyfill支持
                // getPolyFill: true,
                // 自定义一些配置项
                customOptions: {
                    // 搜索框清楚图标 可以url也可以base64
                    searchclearIcon: '',
                    // 搜索放大镜图标 可以url也可以base64
                    searchIcon: '',
                    // 国家选中态图标 可以url也可以base64
                    selectIcon: '',
                    // 侧边栏字母选中态图标 可以url也可以base64
                    slideItemIcon: '',
                },
                selectedCallback: function(res) {
                    console.log('自定义selectedCallback...执行', res);
                    containerBox.style.display = 'none';
                    myCountry.innerText = JSON.stringify(res.eventItemData);
                },
                // 自定义清除按钮点击回调函数
                inputOutBtnCallback: function(e) {
                    // 主动重置状态方法
                    instance.pubResetFn();
                    console.log('inputOutBtnCallback...执行', e, instance);
                },
                // 搜索input失去焦点回调函数
                inputBlurCallback: function(e) {
                    console.log('inputBlurCallback...执行', e);
                },
                // 搜索input获得焦点回调函数
                inputFocusCallback: function(e) {
                    console.log('inputFocusCallback...执行', e);
                },
                // 点击搜索框清楚按钮图标的回调函数
                searchClearIconCallback: function() {
                    console.log('searchClearIconCallback...执行');
                },
                // 请求开始时触发的回调函数
                apiStartCallback: function() {
                    console.log('apiStartCallback...执行');
                },
                // 请求完成时触发的回调函数
                apiEndCallback: function() {
                    console.log('apiEndCallback...执行');
                },
                // 节点挂在完成后的回调函数
                domRenderAfterCallback: function() {
                    console.log('domRenderAfterCallback...执行');
                }
            }).render();
            bth.onclick = function() {
                containerBox.style.display = 'block';
            };
            containerBoxClose.onclick = function() {
                containerBox.style.display = 'none';
            }
            // 当自定义元素高度时需要一步调用改方法使开启列表独立滚动,搜索区域固定效果生效(fixedAndScroll: true才有效)
            // instance.setfixedAndScroll()
            // 给开发人员使用的通过id获取元素的方法 必须传入id尾缀部分
            // instance.getEleByIdPubFn(tail: string);
            // 切换模式(暗黑ml-country-selector-dark和日间模式), 默认日间
            // instance.changeThemePubFn('ml-country-selector-dark');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

# 3.参数和方法说明

# 1、参数说明:

序号 参数 值类型 是否必须 说明 其他
1 el string 容器元素id
2 placeholder string 搜索input的placeholder
3 countryList object[] 自定义国家列表数据源 详细格式表后说明
4 hotCountryList object[] 自定义常用喧嚣国家列表数据源 详细格式表后说明
5 animaInput boolean 是否开启input动画伸缩功能 即“清除”按钮 强烈建议开启
6 inputOutBtnTxt string 自定义按钮文案,仅animaInput开启时候生效
7 immediatelyReset boolean input 失去焦点立即重制所有状态
8 fixedAndScroll boolean 是否开启列表独立滚动,搜索区域固定
9 scrollviewHeight number 自定义滚动区域高度px fixedAndScroll=true有效
10 globalSearchWord boolean input搜索是否全局匹配
11 serachDataIncludeRecommend boolean 搜索数据源是否需要包含“推荐”部分数据
12 selectCountryAfterReset boolean 是否在选中国家后重置状态
13 searchEmptyShowCountryList boolean 当使用input搜索结果为0时候是否也显示国家列表现,如果不显示就会是空白视图, 默认false不显示
14 searchInputMaxNum number 搜索输入最大字符数 默认值20
15 supportEnSearch boolean 是否支持拼音搜索,默认false(非全局匹配模式才生效)
16 searchWordAddStyle boolean 是否开启连续匹配模式下的匹配独立样式 默认false 且globalSearchWord=false生效
17 isHttps boolean 初始化请求类型,建议true
18 inputType string input类型 默认值text,如果useServerSeach=true时建议值search
19 useServerSeach boolean 是否启用server搜索和推荐
20 serverSeaAPI string 自定义搜索接口(当useServerSeach=true时生效) GET请求方式 自定义接口返回数据格式下面说明
21 serverTjAPI string 自定义推荐接口(当useServerSeach=true时生效) GET请求方式 自定义接口返回数据格式下面说明

# 2、回调函数说明:

序号 参数 值类型 是否必须 说明 其他
1 selectedCallback(res) Function 完成国家选择后的回调函数,其中res包含选择的国家数据结果
2 errCallback Function 发生错误的回调函数
3 inputOutBtnCallback Function 自定义清除按钮点击回调函数
4 inputBlurCallback Function 搜索input失去焦点回调函数
5 inputFocusCallback Function 搜索input获得焦点回调函数
6 domRenderAfterCallback Function 节点挂在完成后的回调函数
7 searchClearIconCallback Function 点击搜索框清楚按钮图标的回调函数
8 apiStartCallback Function 请求开始时触发的回调函数
9 apiEndCallback Function 请求完成时触发的回调函数

# 3、可调用方法说明:

序号 参数 值类型 说明 其他
1 pubResetFn Function 主动重置状态方法
2 setfixedAndScroll Function 当自定义元素高度时需要一步调用改方法使开启列表独立滚动,搜索区域固定效果生效(fixedAndScroll: true才有效)
3 getEleByIdPubFn Function 给开发人员使用的通过id获取元素的方法 必须传入id尾缀部分
4 changeThemePubFn Function 主动切换模式(暗黑和日间模式), 默认日间模式。如果需要切换至暗黑模式传入【ml-country-selector-dark】参数值即可,不传则切换至日间模式

1、 countryList、hotCountryList参数格式例子说明

// 注意:必须这种格式
countryList:  [
        { value: "Angola", label: "安哥拉" , code: 0, pingyin: 'angela'},
        { value: "Afghanistan", label: "阿富汗", code: 1, pingyin: 'afuhan'},
        { value: "Albania", label: "阿尔巴尼亚", code: 2, pingyin: 'anerniriya'},
        { value: "Algeria", label: "阿尔及利亚", code: 3, pingyin: 'aerjiliya'},
        { value: "Andorra", label: "安道尔共和国", code: 4, pingyin: 'andaogongheguo'},
      ]
1
2
3
4
5
6
7
8

2、selectedCallback(res)中res参数格式例子说明

{
  "rescode": 0,
  "eventItemData": {
    "index": "25",
    "name": "文莱",
    "enname": "Brunei",
    "countrycode": "25"
  },
  "selectCountry": {
    "value": "Brunei",
    "label": "文莱",
    "index": 25,
    "code": 25
  },
  "originCountryData": [...]
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • rescode值为0表示获取成功,负责为获取异常失败
  • eventItemData是选择的国家的具体数据信息
  • selectCountry是前选择的国家在countryList的具体那项
  • originCountryData是传入的countryList数据

3、serverSeaAPI和serverTjAPI 自定义接口返回数据格式如下:

{
    code: 0,
    message: '',
    data: {
        datalist: [
            {
                "value": "Japan",
                "label": "日本",
                "index": 81,
                "code": 81,
            },
            {
                "value": "Jli",
                "label": "日里",
                "index": 82,
                "code": 82,
            },
        ]
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

值得注意的是:该插件字体等样式的大小是rem单位,所以是以使用场景的html根字体大小为基础的

Last Updated: 3/27/2024, 11:45:08 PM