我正在使用 Angular UI Router,这在大多数情况下都运行良好。但是,我遇到了一种情况,我事先不知道查询字符串参数的名称。
因此,通常使用 UI 路由器,您会定义如下所示的路由:
$stateProvider.state('test', {
url: '/test?testQueryStringParam',
templateUrl: 'Test.html',
controller: 'TestController'
});
然后在我的控制器中,我可以使用 $stateParams 访问 testQueryStringParam。
但是,使用 UI 路由器,您无法访问路由定义中未指定的任何查询字符串参数。
Angular 框架附带的路由器确实允许您执行此操作。所以我尝试将 $location 服务与我的 UI 路由器定义一起使用。这确实有用。
当我想添加查询字符串参数时,我使用:
$location.search("paramName", "paramValue");
当我想获取查询字符串值时,我只需使用:
这会更新 URL,但不会重新实例化控制器(就像 $state.go($state.current, {}, {reload: true}) 那样)。这似乎不是一个大问题,因为我可以自己重新加载数据。但是,如果您在浏览器中使用后退按钮,它会再次更改 URL,但不会重新实例化控制器。
到底有没有
我可以只使用 UI Router 让它工作吗?
获取使用 $location 实际重新实例化控制器的解决方法。?
作为最后的手段,我还尝试直接更新 window.location,但这会刷新整个页面,这是不可接受的。
Thanks
可以传递不出现在URL中的非url参数
$stateProvider.state('test', {
url: '/test?testQueryStringParam',
params: {
optParam: null,
},
templateUrl: 'Test.html',
controller: 'TestController'
});
如你看到的,optParam
是一个可选参数,默认值为 null,并且在 URL 中不可见
您可以使用控制器中的访问此参数$stateParams
$stateParams.optParam
这是一个有帮助的blog http://benfoster.io/blog/ui-router-optional-parameters
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)