如何通过 Algolia 搜索和分页保留额外的 URL 参数

Fas*_*sna 5 javascript filter facet algolia instantsearch.js

我的 URL 中预定义了一些过滤器和查询参数。我需要在 URL 中添加一些其他参数来跟踪用户的来源和其他一些目的。但是,每当我进行新的细化或进入新页面(分页)时。附加参数已被删除。我怎样才能保留这些参数,直到我转到任何其他路线?

mar*_*cus 4

为了保留现有的 url 参数,您必须在 router.history 中创建自己的 URL。

为此,请在搜索时抓取当前对象location.search并合并,或者在退出搜索时删除该对象。routeStaterouteState

我希望以下代码对您有所帮助,如果有人有任何更正,我很高兴听到他们的声音。

const algoliaAppId = 'APP_ID';
const algoliaApiKey = 'API_KEY';
const algoliaIndex = 'instant_search';

const search = instantsearch({
  indexName: algoliaIndex,
  algoliasearch(algoliaAppId, algoliaApiKey),
  routing: {
    router: instantsearch.routers.history({

      createURL({ qsModule, location, routeState }) {
        // current search params 
        const indexState = routeState[algoliaIndex] || {};
        const { origin, pathname, hash, search } = location;
        // grab current query string and convert to object
        const queryParameters = qsModule.parse(search.slice(1)) || {};
        
        // if there is an active search
        if (Object.keys(indexState).length ){
          // merge the search params with the current query params
          Object.assign(queryParameters, routeState);
        }else{
          // remove the search params
          delete queryParameters[algoliaIndex];
        }

        let queryString = qsModule.stringify(queryParameters);

        if(queryString.length){
          queryString = `?${queryString}`;
        }

        return `${origin}${pathname}${queryString}${hash}`;
      },

    })
  }

});

search.start();
Run Code Online (Sandbox Code Playgroud)