Yes. There are multiple ways to accomplish what you are wanting. You can use router.resetConfig
to reset the router's config with a new config:
this.router.resetConfig([
{ path: 'somePath', component: SomeComponent},
...
]);
You can also push
routes onto the config:
this.router.config.push({ path: 'somePath', component: SomeComponent });
Another way I've done this is I had made a way users could build pages using something like TinyMCE and specify the url path they wanted the page to have. In Angular, I specified a wild-card route in the router with { path: '**', component: ComponentBuilder }
, where the ComponentBuilder component would fetch the template from the database that corresponds to the path someone requested and then dynamically generate the component with the template. If a template didn't exist in the database, then a normal Page cannot be found
template was rendered.
Both ways work. It comes down to how you want your application to function and how you will build the pages users create.
There is a lot more documentation and examples on how to create dynamic components since the solution I came up with in version 2 rc4. I have not used any of these, but it looks helpful:
NPM package for Dynamic Components
Angular Docs on Dynamic Component Loader
Dynamically Creating Components
Another article on dynamically creating components