首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现自动建议使用安培-列表,安培-胡子,安培-形式,和放大器-绑定?

如何实现自动建议使用安培-列表,安培-胡子,安培-形式,和放大器-绑定?
EN

Stack Overflow用户
提问于 2018-07-16 13:12:32
回答 1查看 1.4K关注 0票数 0

如何实现自动建议使用安培-列表,安培-胡子,安培-形式,和放大器-绑定?

希望实现页面内搜索的autosuggest

已经研究过这个Google示例

希望autosuggest在此格式的单一页面上找到美国各州首府

代码语言:javascript
复制
<div id='4'>Little Rock is ...</div>

我们的JSON结构如下所示

代码语言:javascript
复制
{
  "items": [{
    "query": "",
    "results": [{"Montgomery, Alabama","id='1'"},
    {"Juneau, Alaska","id='2'"},
    {"Phoenix, Arizona","id='3'"},
    {"Little Rock, Arkansas","id='4'"}]
  }]
}

已经实现了一个最小、完整、可验证的这里的例子

如何根据结果列表中的选择修改示例以导航到页面上的特定项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-16 13:15:04

以下是你需要做的事情的简要总结

1.创建一个过滤结果的服务器终结点。确保它有适当的CORS头。

2.用数字ID呈现来自JSON端点的ID的自动建议项

3.在你的每个或每一个标签上放上身份证。

#2看起来会像这样

代码语言:javascript
复制
{{#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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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-listamp-selector组件,如下所示:

代码语言:javascript
复制
<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/queryJSON格式生成的结果.

JSON endpoint structure

代码语言:javascript
复制
{"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格式的结果。

代码语言:javascript
复制
<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-selectoron=的简要说明如下代码:

代码语言:javascript
复制
on='select:AMP.setState({
  query: event.targetOption}),
  autosuggest-list.hide,{{id}}.scrollTo'

将滚动到:

代码语言:javascript
复制
{{id}}.scrollTo

例如,表行id为107。

代码语言:javascript
复制
<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对象数据声明为:

代码语言:javascript
复制
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服务器

代码语言:javascript
复制
app.use('/state_capitals/query', (req, res) => {
  assertCors(req, res, ['GET']);
  const MAX_RESULTS = 4;
  const query = req.query.q;

3.应用node.js脚本

代码语言:javascript
复制
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文件中的位置设置实现的,如

代码语言:javascript
复制
location /state_capitals/ {
  proxy_pass http://domain:3002/;
}

D:实现

这是一个有用的版本

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51362690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档