从ui-router获取templateUrl

时间:2015-06-25 15:04:44

标签: javascript angularjs angular-ui-router

也许标题不是很清楚。

我正在处理两个嵌套的Angular应用程序。两者都有自己的ui-router构建的路由器。如果我调用主路由器未知的状态,我希望在子应用路由器中搜索此状态,以获得与此状态相关的templateUrlurl

我考虑过使用解析器创建服务。它可以解析文件以找到我想要的数据。这个解决方案可能不是我的最佳选择,这就是为什么我想知道ui-router中是否有特定的功能/方法来实现它。从我在ui-router doc上看到的内容看来,似乎不是:/

随意询问更多详情或建议另一种符合我目标的解决方案:)

1 个答案:

答案 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 */,这对我有用。