Javascript 全局查询字符串参数

Javascript 全局查询字符串参数,javascript,angularjs,Javascript,Angularjs,我必须向现有AngularJS应用程序添加功能。我需要能够将一个附加参数传递给角度应用程序的任何路径。(这是一个电子邮件跟踪ID) 如果可能的话,我想在不影响现有路由的情况下使用querystring参数。然后在某个地方编写一些代码来检查querystring参数(不确定这部分,某种全局导航侦听器?) 我不太熟悉棱角。我是否需要处理路由和控制器中的代码,或者是否有某种方法可以编写一个全局服务来解析querystring参数,而不管路由是什么 我知道我可以创建一个使用$location获取quer

我必须向现有AngularJS应用程序添加功能。我需要能够将一个附加参数传递给角度应用程序的任何路径。(这是一个电子邮件跟踪ID)

如果可能的话,我想在不影响现有路由的情况下使用querystring参数。然后在某个地方编写一些代码来检查querystring参数(不确定这部分,某种全局导航侦听器?)

我不太熟悉棱角。我是否需要处理路由和控制器中的代码,或者是否有某种方法可以编写一个全局服务来解析querystring参数,而不管路由是什么


我知道我可以创建一个使用
$location
获取querystring参数的服务,但我必须将该服务注入到每个看起来有点冗余的控制器中

由于这是一个电子邮件跟踪id,我假设当用户第一次进入网站时,您只需抓取一次即可。看起来你并不是在寻找一个超深的解决方案,所以我建议你在主模块(你的应用程序)最初创建的地方抓取它,并将跟踪id作为属性存储在你的应用程序上

由于这是一个电子邮件跟踪id,我假设当用户第一次进入网站时,您只需抓取一次即可。看起来你并不是在寻找一个超深的解决方案,所以我建议你在主模块(你的应用程序)最初创建的地方抓取它,并将跟踪id作为属性存储在你的应用程序上

使用
$location
。它添加了散列查询字符串参数,如“example.com/#?myParam=value”

获取查询字符串参数:

$location.search(); // gives you an object of params
设置查询字符串参数

$location.search('myParam', 'value'); // one at a time
$location.search({ // or pass an object
     'first':1,
     'second':2
});

只需确保在控制器/指令中插入
$location

使用
$location
。它添加了散列查询字符串参数,如“example.com/#?myParam=value”

获取查询字符串参数:

$location.search(); // gives you an object of params
设置查询字符串参数

$location.search('myParam', 'value'); // one at a time
$location.search({ // or pass an object
     'first':1,
     'second':2
});

只需确保在控制器/指令中注入
$location

如果您想在每次页面更改时从路由中获取查询字符串,则会在
$rootScope
上触发一个
$locationChangeStart
事件,您可以在运行块的某个位置绑定到该事件


但是,如果您试图在整个应用程序中跟踪该值,那么一旦您从服务器获得该值,您就可以将其存储在服务上,并将其注入应用程序中需要的任何位置。如果您试图避免将依赖项注入Angular应用程序,那么您只会伤害自己,尤其是在编写测试时。您的控制器不应该依赖于应用程序的注入器未提供的东西。

如果您每次都想从路由中获取查询字符串,则会在
$rootScope
上触发一个
$locationChangeStart
$locationChangeSuccess
事件,您可以在某个运行块中绑定到该事件页面更改


但是,如果您试图在整个应用程序中跟踪该值,那么一旦您从服务器获得该值,您就可以将其存储在服务上,并将其注入应用程序中需要的任何位置。如果您试图避免将依赖项注入Angular应用程序,那么您只会伤害自己,尤其是在编写测试时。您的控制器不应该依赖于应用程序的注入器没有提供的东西。

是的,您的假设是正确的。我只想在用户第一次访问站点时获取跟踪ID参数(如果存在)。如果可能的话,我不想改变现有的路线。我将研究这种方法。如果你的应用程序有app.run,你可以在那里添加代码,如果没有,你可以安全地将app.run方法添加到你的主js文件中。在创建主模块和配置等之后,只需添加app.run作为单独的一行。太好了,谢谢你的建议。我想这就是我要走的路线。我希望附加的参数不会干扰任何现有的路由!好吧,看来这很管用。我正在将$location注入app.run,我可以从那里使用$location.search()。附加的querystring参数似乎不会影响现有的角度布线。再次感谢。是的,你的假设是正确的。我只想在用户第一次访问站点时获取跟踪ID参数(如果存在)。如果可能的话,我不想改变现有的路线。我将研究这种方法。如果你的应用程序有app.run,你可以在那里添加代码,如果没有,你可以安全地将app.run方法添加到你的主js文件中。在创建主模块和配置等之后,只需添加app.run作为单独的一行。太好了,谢谢你的建议。我想这就是我要走的路线。我希望附加的参数不会干扰任何现有的路由!好吧,看来这很管用。我正在将$location注入app.run,我可以从那里使用$location.search()。附加的querystring参数似乎不会影响现有的角度布线。再次感谢。为什么投票被否决?如果我知道有什么不对劲,我可以改进,因为OP明确表示他正在寻找替代您建议的方法。@MikeFeltman他说“如果可能的话,我想使用querystring参数”为什么投票被否决?如果我知道有什么不对,我可以改进,因为OP特别声明他正在寻找替代您建议的方法。@MikeFeltman他说“如果可能,我想使用querystring参数”