也许标题不是很清楚。
我正在处理两个嵌套的Angular应用程序。两者都有自己的ui-router
构建的路由器。如果我调用主路由器未知的状态,我希望在子应用路由器中搜索此状态,以获得与此状态相关的templateUrl
和url
。
我考虑过使用解析器创建服务。它可以解析文件以找到我想要的数据。这个解决方案可能不是我的最佳选择,这就是为什么我想知道ui-router
中是否有特定的功能/方法来实现它。从我在ui-router
doc上看到的内容看来,似乎不是:/
随意询问更多详情或建议另一种符合我目标的解决方案:)
答案 0 :(得分:0)
您可以通过在子模块上定义的$stateProvider
配置中使用动态参数来实现此目的。所以你在主模块上有一些锚定的路由,如果匹配,ui-router将只是获取相关的模板。如果没有匹配的绝对路由/ url,那么ui-router会回到你的参数化路由上,如下所示:
// anchored
$stateProvider
.state('mainAppState', {
url: '/anchored',
controller: 'myCtrl'
})
// sub module
.state('subAppState', {
url: /:parameter
resolve: { // use the resolve and $stateParams to get some parameter with which you can make a request to your API }
templateProvider: { // inject a service and use it to call your backend }
您可以使用传递给$stateParams
的参数,该参数将传递给您的resolve
块函数,这些函数可以检索某些数据或处理来自$stateParams
的数据,然后templateProvider
可以使用它来提供有意义的后备网址。这是因为templateProvider
收到所有结果。它总是会等待解析块中的所有promise在执行之前以某种方式解析。
通过这种方式,您可以从子应用中的主应用中捕获任何不匹配的网址。希望这会有所帮助。
在此处查看我的问题:ui-router: async data in templateUrl function
哦还有一件事 - 如果您要在构建过程中破坏JS,请确保使用.$inject = [ ... ]
定义templateProvider函数。如果没有,您将收到未知的提供程序错误。 ngAnnotate不会捕获templateProvider
函数中的依赖项。或者,您可以使用/* @ngInject */
,这对我有用。