【问题标题】:Setting a non-Algolia url parameter using the algolia helper使用 algolia 帮助程序设置非 Algolia url 参数
【发布时间】:2016-04-10 19:46:51
【问题描述】:

我正在使用 Algolia 的 Instantsearch.js,我想从我的脚本中更新一个与 Algolia 无关的 uri 查询参数。我看到我可以使用帮助程序设置查询和搜索:

search.helper.setQuery('myquery').search();

这可行,但我想知道是否可以使用帮助程序在查询字符串中设置一个额外的 uri 参数,该参数与 Algolia 查询无关,但与我网站的功能相关。

我看到文档中有多种设置查询参数的函数: https://github.com/algolia/algoliasearch-helper-js#url-helpers 但它们似乎都不符合我正在寻找的东西。在执行上面的 search.helper.setQuery 之前,您对我如何将查询字符串(例如:“country_code”)更新为一个值(例如:“FR”)有什么建议吗?理想情况下,我希望这两个值同时在 uri 中设置。谢谢!

【问题讨论】:

    标签: javascript algolia


    【解决方案1】:

    instantsearch.js 不提供执行此操作的 API,但它会保留由其他代码段设置的每个参数。所以在你的情况下,如果 URL 已经有 country_code,那么你就完成了。

    否则如果你想从前端做,那么你可以使用浏览器的History API。此外,您可以在帮助器上使用getStateAsQueryString,它将序列化当前状态并让您添加更多参数(例如国家代码)。但是您需要小心使用用于在 Instantsearch 中初始化 URL 机制的相同参数(例如哪些属性用于 URL)。如果你使用默认值,你应该很好。

    为了替换当前的 URL / 历史状态,代码如下:

    window.history.replaceState(
      null,
      'Title',
      '?' + helper.getStateAsQueryString({
        moreAttributes: {
          country_code: 'fr'
        }
      }));
    

    要更改参数的当前值,则如下所示:

    window.history.pushState(
      null,
      'Title',
      '?' + helper.getStateAsQueryString({
        moreAttributes: {
          country_code: 'de'
        }
      }));
    

    【讨论】:

    • http://example.com/spaces/find2/?q= 之类的网址开头当在search.helper.setQuery('Paris').search(); 之前使用replaceStatereplaceState 时,我最终会得到这样的网址:q 有两个值:@ 987654329@ 此外,没有“?”在第一个 q 之前,它没有构建有效的 uri。 (续……)
    • 我当前的站点实际上是从:http://example.com/spaces/find2?q= 开始的,但这会被砍成这个(删除 find2 路径)! http://example.com/spaces/q=&cc=FR?q=Paris 所以也许我需要找到一个 javascript url 库来清理它,而不是使用内置的 pushState / replaceState 方法。
    • 如果您想重用q 参数并且您不使用搜索框并且您希望搜索的查询参数具有相同的值,那么您的初始解决方案。你有网址可以分享一下吗?
    • 谢谢@bobylito - 我给你发了电子邮件。还注意到console.log(search.helper.getStateAsQueryString({ moreAttributes: { country_code: 'FR' } } ) 仅输出例如:"q=&cc=FR",而不是“?”之后的查询部分。谢谢!!
    • 好的,Tim Carry 解决了这个问题 - 稍作调整:为了使其正常工作,有必要添加“?” + helper.getStateAsQueryString({ .... 然后替换适用于 pushState 和 replaceState,因此可能应该将其添加到解决方案中。Bravo!
    猜你喜欢
    • 2017-06-01
    • 2020-10-31
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 2020-12-01
    • 2018-10-23
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多