如何实现自动建议使用安培-列表,安培-胡子,安培-形式,和放大器-绑定?
希望实现页面内搜索的autosuggest。
已经研究过这个Google示例
希望autosuggest在此格式的单一页面上找到美国各州首府
<div id='4'>Little Rock is ...</div>我们的JSON结构如下所示
{
"items": [{
"query": "",
"results": [{"Montgomery, Alabama","id='1'"},
{"Juneau, Alaska","id='2'"},
{"Phoenix, Arizona","id='3'"},
{"Little Rock, Arkansas","id='4'"}]
}]
}已经实现了一个最小、完整、可验证的这里的例子
如何根据结果列表中的选择修改示例以导航到页面上的特定项?
发布于 2018-07-16 13:15:04
以下是你需要做的事情的简要总结
1.创建一个过滤结果的服务器终结点。确保它有适当的CORS头。
2.用数字ID呈现来自JSON端点的ID的自动建议项
3.在你的每个或每一个标签上放上身份证。
#2看起来会像这样
{{#results}}
<div
class='select-option no-outline'
role='option'
tabindex='0'
on='tap:autosuggest-list.hide,{{id}}.scrollTo'
option='{{title}}'
>{{title}}</div>
{{/results}}下面是特定的构建过程(步骤A)
A. HTML和AMP代码:
server endpoint 大写/查询
amp-form
<form
method='post'
action-xhr='https://example.com/state_capitals'
target='_blank'
id='search-form'
on='submit:autosuggest-list.hide;submit-success:results.show'
autocomplete='off'
>HTML input
<div class='search-container'>
<input
id='query'
name='query'
type='text'
class='search-box'
on="input-debounced:AMP.setState({
query: event.value,
autosuggest: event.value
}),
autosuggest-list.show,
results.hide"
[value]="query || ''"
/>
<button class='search-submit' type='submit'>Search</button>
</div>以上代码集输入框
amp-list接下来,将来自'/state_capitals/query'端点的结果绑定到amp-list和amp-selector组件,如下所示:
<amp-list
class='autosuggest-box'
layout='fixed-height'
height='120'
src='/state-capitals/query'
[src]="'/state-capitals/query?q=' + (autosuggest || '')"
id='autosuggest-list'
hidden
>放大器列表组件的来源来自/state-capitals/query以JSON格式生成的结果.
JSON endpoint structure
{"items":[{
"query": "",
"results": [
{"title": "Little Rock, Arkansas", "id":"4"},
{"title": "Olympia, Washington", "id":"47"},
{"title": "Charleston, West Virginia", "id":"48"},
{"title": "Madison, Wisconsin", "id":"49"},
...
]}]}amp-template使用amp-mustache组件打印JSON格式的结果。
<amp-list ...>
<template type='amp-mustache'>
{{#results}}
<amp-selector
keyboard-select-mode='focus'
layout='container'
on='select:AMP.setState({query: event.targetOption}),
autosuggest-list.hide,{{id}}.scrollTo'
>
<div
class='select-option no-outline'
role='option'
tabindex='0'
on='tap:autosuggest-list.hide'
option='{{title}}'
>{{title}}</div>
{{/results}}
</amp-selector>
</template>
</amp-list>关于amp-selector和on=的简要说明如下代码:
on='select:AMP.setState({
query: event.targetOption}),
autosuggest-list.hide,{{id}}.scrollTo'将滚动到:
{{id}}.scrollTo例如,表行id为107。
<li><a href="1">Montgomery</a></li>
<li><a href="2">Juneau</a></li>
<li><a href="3">Phoenix</a></li>
<li><a href="4">Little Rock</a></li>B.端点实现
1.将JSON对象数据声明为:
Data = [
{"title": "Little Rock, Arkansas", "id":"4"},
...
{"title": "Olympia, Washington", "id":"47"},
{"title": "Charleston, West Virginia", "id":"48"},
{"title": "Madison, Wisconsin", "id":"49"},
];2.实现node.js服务器
app.use('/state_capitals/query', (req, res) => {
assertCors(req, res, ['GET']);
const MAX_RESULTS = 4;
const query = req.query.q;3.应用node.js脚本
if (!query) {
res.json({
items: [{
query: "",
results: capitals.slice(0, MAX_RESULTS)
}]
});
} else {
const lowerCaseQuery = query.toLowerCase();
const filtered = capitals.filter(function(e) {return e.title.toLowerCase().includes(lowerCaseQuery)});
res.json({
items: [{
query: "",
results: filtered.slice(0, MAX_RESULTS)
}]
});
}
});C. NGINX设置
Node.js应用程序在domain:<…上运行>和指定端口。
当用户在浏览器中运行您的网站时,请让Nginx将80端口的所有流量转发到指定的端口。这是使用conf文件中的位置设置实现的,如
location /state_capitals/ {
proxy_pass http://domain:3002/;
}D:实现
https://stackoverflow.com/questions/51362690
复制相似问题