Angularjs:在应用程序配置通过后定义路由

时间:2013-08-27 14:02:13

标签: angularjs routing

在应用程序运行后是否可以添加和删除路由?

我们有一个应用程序,它已经在浏览器中运行,当用户在应用程序中启动一个小部件时,我们会动态加载额外的脚本。 (将其视为谷歌或苹果的应用程序商店,然后点击某个应用程序,它会打开应用程序,并带有自己的脚本)

现在应用程序需要做的其中一件事就是在应用程序中有路径。

当前路由:

  • app store:/apps
  • app store的应用详情:/apps/:appname
  • 应用的网址:/app/:appname
  • 应用内的路线:/app/:appname/:...这可能是:/app/notes/create/app/contacts/edit/app/contacts/new

每个应用可以有不同的路线,不一定在同一级别,它们可以是/app/news/foreign/latest

每个应用必须是独立的,并且应用程序的脚本加载时应该加载路由。我们设法通过$controllerProvider.register方法为控制器和指令执行此操作,以便在应用程序启动后将控制器添加到应用程序。

但在应用的配置阶段后,$routeProvider不可用。

我设法以肮脏的方式公开它:

var myApp = angular.module('myApp', []);
myApp.config(function AppConfig($routeProvider) {
    myApp.routeProvider = $routeProvider;
});

这样看起来我可以注册路由,但正如我所料,当你在浏览器中手动输入时,这些url中的任何一个都不起作用,因为角度应用程序本身在运行时不知道这些路由。

实际上,这些路由仅在触发/app/:appname路由后才可用,然后加载脚本并添加额外路径。

TL; DR:

  • 可以在应用程序启动后干净地注册新路由
  • 有没有人知道直接链接到其中一个子路由的解决方案,当它们尚未为应用程序所知时?

我正在尝试将一个jsfiddle放在一起,但这是一个难以置入jsfiddle的概念。

1 个答案:

答案 0 :(得分:1)

更多地考虑这一点,以不同的方式解决了我们的问题,我只是清楚地知道我的请求是不可能的。

  • 您无法链接到尚未注册的路线
  • 之后注册路线可以完成,但不像在模块的配置部分使用routeProvider一样干净。