如何获取闪电组件Salesforce中的查询字符串参数

时间:2019-09-26 12:27:08

标签: javascript salesforce salesforce-lightning salesforce-communities

我正在尝试从当前页面获取url查询字符串参数,并且我有以下代码:

doInit: function (component, event, helper) {
    var urlParams = new URLSearchParams(window.location.search);
    console.log("params::: ", urlParams);
    if (urlParams.has("openSidebar") && urlParams.get("openSidebar") == true) {
      console.log("redirection happening....");

      component.set("v.showFeed", true);
      component.set("v.isSidebarOpen", true);
    }
  },

出于某种原因,我似乎无法使用此行 var urlParams = new URLSearchParams(window.location.search); ,但我不知道为什么。

是否有其他方法或Salesforce方式可以从url获取查询字符串参数?

我基本上什么也没得到,执行似乎停在了我使用 URLSearchParams 的那一行!

还想知道为什么在这种情况下闪电不让普通的javascript执行吗?

2 个答案:

答案 0 :(得分:1)

使用new URLSearchParams将返回类的实例,而不是对象(或映射)。

您可以使用此代码将键/对值转换为对象。然后,您可以改为检查对象上的值:

const searchParams = new URLSearchParams('?openSidebar=true&foo=bar&test=hello%26world')
const params = [...searchParams.entries()].reduce((a, [k, v]) => (a[k] = v, a), {})
console.log(params)


if (params.openSidebar === 'true') {
  console.log("redirection happening....");
  // do stuff here      
}

  

请注意,由于url参数始终是字符串类型,因此我们使用=== 'true'

由于您说它不起作用,因此您可以构建自己的解析器:

const qs = '?openSidebar=true&foo=bar&test=hello%26world'
  .slice(1) // remove '?'

const d = decodeURIComponent // used to make it shorter, replace d with decodeURIComponent if you want
const params = qs
  .split('&') // split string into key/pair
  .map(s => s.split('=')) // split key/pair to key and pair
  .reduce((a, [k, v]) => ((a[d(k)] = d(v)), a), {}) // set each object prop name to k, and value to v

console.log(params)

  

请注意,我们使用decodeURIComponent()(或简写d() last ,因为参数可能包含与号或等号。如果我们首先调用d(),我们将拆分这些字符,我们不想发生这种情况。

答案 1 :(得分:-1)

URLSearchParams()在我的浏览器上也无法正常运行,但我想出了一个帮助程序来完成工作。

function getURLSearchParameters() {
  const urlSearchParameters = {};
  let searchParameters = decodeURIComponent(window.location.search);
  if (searchParameters !== '') {
    searchParameters = searchParameters.substring(1).split('&'); // get ride of '?'
    for (let i = 0; i < searchParameters.length; i++) {
      [key, value] = searchParameters[i].split('=');
      urlSearchParameters[key] = value;
    }
  }
  return urlSearchParameters;
}

很遗憾,由于我没有任何Salesforce经验,因此我无法回答您的其他问题