Javascript 从ui路由器获取模板URL
也许标题不太清楚 我正在开发两个嵌套的Angular应用程序。两者都有自己的路由器,内置Javascript 从ui路由器获取模板URL,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,也许标题不太清楚 我正在开发两个嵌套的Angular应用程序。两者都有自己的路由器,内置ui路由器。如果我调用主路由器未知的状态,我希望它在子应用程序路由器中搜索此状态,以获取与此状态相关的templateUrl和url 我考虑用解析器创建一个服务。它可以解析文件以找到我想要的数据。这个解决方案可能不是我的最佳选择,这就是为什么我想知道ui路由器中是否有特定的功能/方法来实现它。从我在ui路由器doc上读到的内容来看,似乎不是:/ 请随时询问更多详细信息或建议与我的目标相匹配的其他解决方案:)您
ui路由器
。如果我调用主路由器未知的状态,我希望它在子应用程序路由器中搜索此状态,以获取与此状态相关的templateUrl
和url
我考虑用解析器创建一个服务。它可以解析文件以找到我想要的数据。这个解决方案可能不是我的最佳选择,这就是为什么我想知道ui路由器中是否有特定的功能/方法来实现它。从我在ui路由器
doc上读到的内容来看,似乎不是:/
请随时询问更多详细信息或建议与我的目标相匹配的其他解决方案:)您可以通过在子模块上定义的$stateProvider
配置中使用动态参数来实现这一点。因此,您在主模块上有一些锚定路由,如果存在匹配,ui路由器将简单地获取关联的模板。若并没有匹配的绝对路由/url,那个么ui路由器会退回到你们的参数化路由,如下所示:
// 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
可以使用该参数提供有意义的回退URL。这是因为templateProvider
接收所有解析。它将始终等待解析块中的所有承诺以某种方式解析,然后再执行
这样,您就可以在子应用程序中从主应用程序捕获任何不匹配的URL。希望这有帮助
请参见我的问题:
哦,还有一件事-如果您要在构建过程中损坏JS,请确保使用$inject=[…]
定义templateProvider函数。否则,您将得到一个未知的提供程序错误。ngAnnotate将不会捕获templateProvider
函数中的依赖项。或者,您可以只使用对我有用的/*@ngInject*/
。您可以通过在子模块上定义的$stateProvider
配置中使用动态参数来实现这一点。因此,您在主模块上有一些锚定路由,如果存在匹配,ui路由器将简单地获取关联的模板。若并没有匹配的绝对路由/url,那个么ui路由器会退回到你们的参数化路由,如下所示:
// 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
可以使用该参数提供有意义的回退URL。这是因为templateProvider
接收所有解析。它将始终等待解析块中的所有承诺以某种方式解析,然后再执行
这样,您就可以在子应用程序中从主应用程序捕获任何不匹配的URL。希望这有帮助
请参见我的问题:
哦,还有一件事-如果您要在构建过程中损坏JS,请确保使用$inject=[…]
定义templateProvider函数。否则,您将得到一个未知的提供程序错误。ngAnnotate将不会捕获templateProvider
函数中的依赖项。或者你可以直接使用/*@ngInject*/
,这对我很有用。我不确定是否能得到它。你的解决方案应该是可行的,但我不知道如何在两个路由器上使用它。这两个应用程序都必须独立工作,我认为你的建议不可能做到这一点。它无法在第二个路由器中获取任何信息。或者我没有完全理解你说的话,这也是可能的。我接受你的回答。即使它与问题不完全匹配,它也允许我创建一个动态路由器。我还使用本文来实现我的目标:。无论如何谢谢你!很高兴这有帮助。我不认为现在有任何其他方法可以用ui路由器创建一个动态路由器。我不确定是否能得到它。你的解决方案应该是可行的,但我不知道如何在两个路由器上使用它。这两个应用程序都必须独立工作,我认为你的建议不可能做到这一点。它无法在第二个路由器中获取任何信息。或者我没有完全理解你说的话,这也是可能的。我接受你的回答。即使它与问题不完全匹配,它也允许我创建一个动态路由器。我还使用本文来实现我的目标:。无论如何谢谢你!很高兴这有帮助。我认为目前没有任何其他方法可以用ui路由器创建动态路由器。