- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想从以 JSON 格式获取的服务动态加载 @RouteConfig 的路由,
[
{ "path" : "/about" , "name" : "About" , "component" : "AboutComponent" },
{ "path" : "/contact" , "name" : "Contact" , "component" : "ContactComponent" }
]
以下是将其插入 RouteDefinition 数组的代码,
for (let i = 0; i < data.length; i++) {
//console.log(data[i].path+" "+data[i].name+" "+data[i].component);
this.routeConfigArray.push({ //routeConfigArray : RouteDefinition
'path': data[i].path,
'name': data[i].name,
'component': data[i].component
});
this._router.config(this.routeConfigArray); // THIS FAILS TO CONFIG PATHS ON ROUTER
}
'component':data[i].component
需要 Classname,因为它通过 String 类接收它。如何将包含类名的字符串转换为类??
我也尝试过使用 Route 类:
this.routeConfigArray.push(new Route({path: data[i].path, name: data[i].name, component:data[i].component}));
控制台错误:
Component for route "/about" is not defined, or is not a class. i have tried numerous ways like using
eval("new "+data[i].component+"()); || new window[data[i].component] .
我被困在这个问题上,对于如何解决这个问题真的很困惑。
最佳答案
TypeScript 以某种方式将导入编译为 javascript,您可以尝试类似这样的方法来使用 eval()
(畏缩)。如果 typescript 的编译方式不同,这显然是行不通的,但是检查它是否能以任何方式工作很有趣 :)
for (let i = 0; i < data.length; i++) {
this.routeConfigArray.push({ //routeConfigArray : RouteDefinition
path: data[i].path,
name: data[i].name,
component: getComponent(data[i].component)
});
this._router.config(this.routeConfigArray);
}
function getComponent(comp : string) : Function {
//convert camelCase to underscore notation
let component : string = comp;
component = component[0].toLowerCase() + component.slice(1);
component = component.replace(/([A-Z])/g, function(match) {
return '_' + match.toLowerCase();
});
component += '_1';
return eval(component[comp])
}
附录
作为您自己使用 AsyncRoute
的解决方案的补充,我相信您实际上得到了一个非常好的解决方案。也许如果您以某种方式放置所有页面,您可以从 path
中提取 resource
位置,但这不是必需的。 (我的意思是从 path
字符串 /about
到 resource
字符串 ./app/about/about.component
应该不难用一个小算法。但这可能需要更新。
无论如何,你可以用 AsyncRoute
尝试这样的事情
警告:前方未经测试的代码
let routes : any[] = [
{ "path" : "/about" , "name" : "About" , "component" : "AboutComponent", "route": "/About" , "resource" : "./app/about/about.component" },
{ "path" : "/contact" , "name" : "Contact" , "component" : "ContactComponent", "route": "/Contact" , "resource" : "./app/contact/contact.component" }
];
routes.forEach((route : any) => {
this.routeConfigArray.push(
new AsyncRoute({
path : route.path,
loader : () => System.import(route.resource).then(m => m[route.component]),
name : route.name
})
);
});
this._router.config(this.routeConfigArray);
关于angularjs - Angular 2 中的动态路由加载失败。 (测试版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35887063/
我正在尝试使用 Customer Chat Plugin在我的网站(不是 Wordpress)中,但为了测试插件是否正常工作,我需要多次部署它。 有什么方法可以在我的本地机器上进行测试吗?使用本地主机
当我输入 java -version 时,这是我得到的输出: java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_
我正在为 OpenTok(iOS WebRTC SDK)构建一个带有 CocoaPods 组件的项目,他们已经发布了测试版,但他们无意将其添加为 Beta 测试规范。 我的问题是关于为该测试版制定规范
我正在尝试使用新的 iTunesConnect 测试版。我正在尝试邀请用户进行测试,但他已经拥有 iTunes 开发者帐户,因此不允许我邀请他: The email address you enter
对于在 Bata 6 中遇到类似问题的任何人。我通过删除/Users/[your username]/Library/Developer/Xcode/DerivedData 中的内容解决了这个问题,可
我有兴趣为 BlackBerry 设备开发应用程序,想知道他们是否支持为应用程序开发人员提供演示版或测试版的概念?通过这个,我的意思是能够将我的应用程序的测试版或演示版部署到有限/受限的受众,例如业务
我已经在Google Play上将flutter应用程序部署为生产模式,该链接为https://play.google.com/store/apps/details?id=yurikanamba.lo
我正在试用 x 包中的新机器学习模块。我试图及时识别 HTTP 访问日志中的罕见响应代码。我的日志存储在 elasticsearch 中,如下所示: { "_index": "logstash-2
我看到越来越多的开发人员使用企业开发人员帐户发布其应用程序的公测版本。最后我读到,Enterprise TOS 只允许在内部向员工发布应用程序。 Apple 现在正式容忍使用企业帐户进行公开测试,还是
我最近为客户开发了一款应用,现在必须在 Crashlytics 上分享它以获得 Beta 版。我过去曾多次这样做,但使用此应用程序时出现问题。 当我在 Crashlytics Studio 的插件上上
我在 Google Play 测试版中运行了一个应用程序,然后最近才使用更高版本的 APK “发布到生产环境”。 但是,当我进入 Google Play 列表时,我的应用仍然显示 AppName (B
如何安装 Gatsby@v2?我遵循了 https://next.gatsbyjs.org/docs/ 处的文档这应该是新版本的文档。它说运行 npm install --global gatsby-
我正在尝试在 Visual Studio 2010 中编译一个项目。它在 Visual Studio 2008 中运行良好,但 2010 出现以下错误: The primary reference "
我对 Highstock 产品(测试版)有疑问,http://www.highcharts.com/products/highstock 对于任何有使用过此功能或认为可以回答的人,请!!! 我注意到有
我昨天刚刚获得了一个 Apple ID,只是为了在 iPhone 上测试我的 Xcode 应用程序。我还将 Xcode 升级到了 7.2。我通过 USB 线将手机连接到 Macbook Air,并尝试
几个月来,我们一直在使用 Apple 的 TestFlight 工具来分发我们的应用程序的 Beta 版本(在合并到 AppStore 之前从旧的 TestFlight 服务迁移而来)。直到今天一切都
MapMaker maximumSize 在 google guava 库中被标记为 @Beta。当您将它用作缓存时设置最大大小是一个非常有用的功能,我想在生产代码中使用它。从使用其他谷歌产品的经验来
我能知道安装 Xcode 8 beta 的最低系统要求吗? 目前我有 OS X Yosemite 版本 10.10.5 硬件 处理器:2.6 GHz 英特尔酷睿 i5 内存 8GB 最佳答案 兼容性
当尝试在运行时初始化我的类的一个实例时,应用程序似乎卡住并且无法继续,这里是: class Game: NSObject { var allies: DoubleLinkedList
我正在玩 Avalonia我正在尝试显示一个消息框,该消息框等同于 WinForms 的 MessageBox.Show()。我找到了 GitHub issue那是为此请求一个 API,但我想知道人们
我是一名优秀的程序员,十分优秀!