我正在将现有的db(Wordpress)驱动站点转换为Angular 2前端,保持后端不变。我正处于路由阶段,我想从数据库中提取的JSON数据创建路由。
所以,我创建了一个服务来从数据库中提取数据和一个单独的路由模块来注册路由:
app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { NavService } from './nav.service';
var navService: NavService;
const routes: Routes = navService.getRoutes();
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRouting{}
nav.service.ts
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class SiteNavService{
private _navUrl = 'pathtofile/?action=ajax_site_nav';
constructor(private _http: Http){}
getNav(){
return this._http.get(this._navUrl)
.map( res => res.json())
.toPromise();
}
}
该服务在app.module.ts providers数组中注册,并在routes数组中注册路由模块。我无法让nav.service在路由模块文件中工作。
我刚才正在努力尝试动态添加路由到角度2,并发现获取当前路由
this.router.config
然后更改它们并应用更改
this.router.resetConfig(newRoutes);
工作得很好我在这里有我的演示项目,可能有助于从json https://github.com/davidejones/angular2-routertest动态添加团队成员
现在可以使用Xo for Angular:https://wordpress.org/plugins/xo-for-angular/
Xo根据您的WordPress内容,帖子,页面等创建动态路由。
使这成为可能的秘诀是在Angular Route定义中使用loadChildren来延迟加载特定模块。这是必要的,否则Route会期望导入的组件不切实际。
来自docs站点API的输出示例:https://angularxo.io/xo-api/routes/get
然后在使用angular-xo模块的Angular App中,通过调用:router.resetConfig(response.routes)来加载和更新这些路由;
取自这个文件:https://github.com/WarriorRocker/angular-xo-node/blob/master/lib/src/services/route.service.ts
完全披露,我是上述插件的作者。
更多文档(正在进行中):https://angularxo.io