【问题标题】:Angularjs: define a route after application config has passedAngularjs:在应用程序配置通过后定义路由
【发布时间】:2019-07-03 06:18:55
【问题描述】:

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

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

现在,应用需要做的其中一件事就是在应用内部设置路由。

当前路由:

  • 应用商店:/apps
  • 应用商店的应用详情:/apps/:appname
  • 应用程序的网址:/app/:appname
  • 应用程序中的路由:/app/:appname/:... 这可能是:/app/notes/create/app/contacts/edit/app/contacts/new

每个app可以有不同的路由,不一定在同一层级,可以是/app/news/foreign/latest

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

$routeProvider 在应用程序的配置阶段后不可用。

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

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

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

事实上,这些路由只有在触发/app/:appname 路由后才可用,然后会加载脚本并添加额外的路由。

TL;DR:

  • 是否可以在应用启动后干净地注册新路线
  • 有没有人知道直接链接到其中一个子路由的解决方案,而应用程序“还”不知道这些子路由?

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

【问题讨论】:

  • 抱歉回复晚了,我使用类似的技术在启动后注册路由,但给定的答案没有帮助,也不适用于深度链接。当您链接到其中一个动态路由时,应用程序启动并且不知道该路由,因此它不起作用并将您抛出到 else 语句(在我们的例子中是登录页面)

标签: angularjs routing


【解决方案1】:

仔细考虑这一点,以不同的方式解决了我们的问题,我越来越清楚我的请求是不可能的。

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

【讨论】:

  • 能否告诉我们如何在应用运行后注册一条新路线?
猜你喜欢
  • 2016-04-14
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多