Angular UI Router - 允许任何查询字符串参数

Dow*_*pel 7 angular-ui-router

我使用的是Angular UI路由器,这在大多数情况下效果很好.但是,我有一种情况,我不知道提前查询字符串参数的名称.

通常使用UI路由器,您可以定义类似这样的路由:

$stateProvider.state('test', {
	url: '/test?testQueryStringParam',
	templateUrl: 'Test.html',
	controller: 'TestController'
});
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中,我可以使用$ stateParams访问testQueryStringParam.

但是,使用UI路由器,您无法访问路径定义中未指定的任何查询字符串参数.

Angular框架附带的路由器确实允许您这样做.所以我尝试使用我的UI路由器定义的$ location服务.这确实很有效.

当我想添加查询字符串参数时,我使用:

$location.search("paramName", "paramValue");
Run Code Online (Sandbox Code Playgroud)

当我想获取查询字符串值时,我只是使用:

这会更新URL,但不会重新实例化控制器(如$ state.go($ state.current,{},{reload:true})).这似乎不是一个大问题,因为我可以自己重新加载数据.但是,如果您在浏览器中使用后退按钮,它将再次更改URL,但不会重新实例化控制器.

无论如何还有

  1. 我可以使用UI路由器来实现这一点吗?

  2. 获取使用$ location来实际重新实例化控制器的解决方法.

作为最后的手段,我也尝试指导更新window.location,但这会刷新整个页面,这是不可接受的.

谢谢

Pra*_*hat 0

可以传递不出现在URL中的非url参数

$stateProvider.state('test', {
    url: '/test?testQueryStringParam',
    params: {
    optParam: null,
    },
    templateUrl: 'Test.html',
    controller: 'TestController'
});
Run Code Online (Sandbox Code Playgroud)

如您所见,optParam是一个可选参数,默认值为 null,并且在 URL 中不可见

您可以使用控制器中的访问此参数$stateParams

$stateParams.optParam
Run Code Online (Sandbox Code Playgroud)

这是一个有用的博客