在前端开发中,经常需要与用户交互获取输入信息。而 Inquirer.js 是一个功能强大的命令行交互工具,它提供多种交互方式,包括选择题、输入框、确认框等等。但是,在处理大量选项时,使用纯文本输入框会变得比较麻烦。这时就可以使用 inquirer-autocomplete-prompt
这个 npm 包,它提供了自动完成输入的功能。
安装
使用 npm
安装:
npm install inquirer-autocomplete-prompt
示例
下面是一个简单示例,演示如何使用 inquirer-autocomplete-prompt
实现输入城市名自动补全:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------------ - ---------------------------------------- -- ---- ----- ------ - - ----- ----- ----- ----- ----- ----- ----- ----- ----- ---- -- -- -------- -------- --------------------- ------ - ----- - ----- -- --- ------ --- ------------------------- - ----- -------------- - ------------------ -- ---------------------- ------------------------ --- - -- -------- --------------------------------------- -------------------- -- ---- ----- --------- - - - ----- --------------- ----- ------- -------- -------------- ------- ------------ - -- -- ---- --------------------------------------- -- - --------------------------------------- ---
在上面的示例中,我们定义了一个城市列表,然后通过 searchCities
函数来过滤出包含用户输入内容的城市信息。接着,注册自动完成提示并创建一个使用该提示的问题。最后,通过调用 inquirer.prompt
来启动询问过程。
深入探讨
定义问题
在上面的示例中,我们通过以下代码定义了一个选择题:
{ type: 'autocomplete', name: 'city', message: '请输入你要查询的城市:', source: searchCities }
其中,type
属性指定了类型为 autocomplete
,name
属性指定了问题的名称,message
属性则是问题的描述信息。而 source
属性则是用于提供自动完成提示选项的回调函数。需要注意的是,该回调函数必须返回一个 Promise 对象,并且在 Promise 的 resolve 回调函数中返回一个字符串数组,表示可供选择的选项列表。
自动完成回调函数
自动完成回调函数将由 Inquirer.js 在用户输入时调用,并获得两个参数:答案对象 answers
和用户当前输入的值 input
。自动完成回调函数需要根据输入值筛选出合适的候选项列表,并将其以 Promise 对象的形式返回。
在示例中,我们通过以下代码定义了一个自动完成回调函数:
function searchCities(answers, input) { input = input || ''; return new Promise(function(resolve) { const filteredCities = cities.filter(city => city.includes(input)); resolve(filteredCities); }); }
该回调函数首先判断 input
是否为空,如果是,则返回全部城市列表;否则,使用 Array.prototype.filter() 方法来过滤出包含 input
值的城市列表,并将其以 Promise 对象的形式返回。
注册自动完成提示
在使用 inquirer-autocomplete-prompt
包时,需要先注册自动完成提示:
inquirer.registerPrompt('autocomplete', autocompletePrompt);
如上所示,我们使用 inquirer.registerPrompt
方法将类型为
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/54051