【问题标题】:how do I get the query string parameters in lightning component salesforce如何在闪电组件 salesforce 中获取查询字符串参数
【发布时间】:2020-01-26 17:34:48
【问题描述】:

我正在尝试从当前页面获取 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); 我不知道为什么。

是否有任何替代或销售人员的方式来从 url 获取查询字符串参数?

我基本上一无所获,执行似乎停止在我使用 URLSearchParams 的那一行!

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

【问题讨论】:

    标签: javascript salesforce salesforce-lightning salesforce-communities


    【解决方案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;
    }
    

    很遗憾,我无法回答您的其他问题,因为我没有任何销售人员方面的经验

    【讨论】:

    • 似乎不起作用,我认为它挂在之间: [key, value] = searchParameters[i].split('='); urlSearchParameters[key] = value;
    【解决方案2】:

    使用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      
    }

    注意,我们使用=== 'true',因为 url 参数始终是字符串类型。

    既然你说它不起作用,你可以构建自己的解析器:

    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(),我们会拆分这些字符,这是我们不希望发生的。

    【讨论】:

    • 使用 const searchParams = new URLSearchParams( "?openSidebar=true&foo=bar&test=hello%20world" );
    • 你用的是什么浏览器?
    • 我不知道出了什么问题,因为这段代码对我来说很好,我还是会写一个解析器
    • 只是让你知道这段代码存在于闪电组件salesforce框架下,你认为这也可能是一个问题吗?
    • 如果你不能运行我的代码,我会认为这与你的机器有关
    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 2022-01-13
    • 1970-01-01
    • 2020-05-16
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多