2017-07-14 59 views
0

我已经部署了火力网站工作正常。我的问题是下一个: 里面我main.js我有一个名为company变量。有没有办法根据URL设置该变量?例如:设置一个变量与URL

site-ce207.firebaseapp.com/company=01 

或者你知道另一种方式吗?

+2

是的,你已经使用但是例如,将无法正常工作。使用'http:// www.example.com /#company = 01'或'http://www.example.com/?company=01将会工作。您可以使用正则表达式或'location'对象中的方法获取值。请注意,这些选项不是他们打算如何使用的。所以可能会出现副作用。 – Mouser

+1

而是将它作为一个参数,也可以考虑将它们传递路径'site-ce207.firebaseapp.com /公司/ 01'标识符。根据你想用这个URL来完成的事情,后者可能会更习惯。 –

回答

3

正如Mouser的指出,这是无效的:

site-ce207.firebaseapp.com/company=01 

然而,这个心不是:

site-ce207.firebaseapp.com#company=01&id=5 

,它可以很容易地分析:

var queries=location.hash.slice(1).split("&").map(el=>el.split("=")); 

查询now.looks像这样:

[ 
["company","01"], 
["id","5"] 
] 

因此,要解决这个问题可以不使用对象:

var getQuery={}; 
queries.forEach(query=>getQuery[query[0]]=query[1]); 

所以,现在很容易获得某个键:

console.log(getQuery["company"]); 

还是新的,使用地图更容易:

var query=new Map(queries); 
console.log(query.get("company")); 
+0

工作了不起!只是一件事:由于公司是第一个项目,它是“#公司”而不是“公司”。所以通过query.get(“#company”)解决。 – Ace

+0

@Ace的权利,编辑切片走了... –

+0

请编辑你的问题,没有箭头函数,因为它们还不常见。 – Mouser

0

我有一个简单的功能,我发现了一个很久以前就处理这个问题。我修改了一下,通过这样做来获得价值。

function param(name) { 
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); 
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), 
     results = regex.exec(location.search); 
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

,然后用我做的值时发出的东西时,像下面

var myCity = param('cityid'); 

http://example.com/?cityid=Guatemala

myCity将有“危地马拉”在我的应用程序的价值。