【发布时间】: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 语句(在我们的例子中是登录页面)