全局查询字符串参数

Global querystring parameter

本文关键字:参数 字符串 全局查询      更新时间:2023-09-26

我必须为现有的AngularJS应用程序添加功能。我需要能够向angular应用的任何路由传递一个额外的参数。(这是一个电子邮件跟踪ID)

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

我对angular不是很熟悉。我需要混乱的路由和混乱的代码在控制器,或者有某种方式我可以编码一个全局服务来解析querystring参数,而不管路由?

我知道我可以创建一个使用$location获取querystring参数的服务,但我必须将该服务注入每个控制器,这似乎有点多余。

因为这是一个电子邮件跟踪id,我假设你只需要在用户第一次进入网站时抓住它一次。它也看起来像你不是在寻找一个超级深入的解决方案,所以我建议只是抓住它的主模块(你的应用程序)是第一次创建和存储跟踪id作为一个属性在你的应用程序。

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

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

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