Estoy construyendo un cms donde un usuario puede elegir qué páginas usar. Entonces, si el usuario quiere una página de contacto, la selecciona y completa algún contenido para ella y su sitio tendría una ruta de contact , por ejemplo. En base a esto, ¿es posible agregar dinámicamente rutas en angular en función de si un usuario quiere o no quiere una página en particular?
Sí. Hay múltiples formas de lograr lo que quieres. Puede usar router.resetConfig para restablecer la configuración del enrutador con una nueva configuración:
this.router.resetConfig([ { path: 'somePath', component: SomeComponent}, ... ]); También puede push rutas a la configuración:
this.router.config.push({ path: 'somePath', component: SomeComponent }); Otra forma en que hice esto es que había creado una forma en que los usuarios podían crear páginas usando algo como TinyMCE y especificar la ruta de URL que querían que tuviera la página. En Angular, especifiqué una ruta comodín en el enrutador con { path: '**', component: ComponentBuilder } , donde el componente ComponentBuilder obtendría la plantilla de la base de datos que corresponde a la ruta que alguien solicitó y luego generaría dinámicamente la componente con la plantilla. Si no existía una plantilla en la base de datos, entonces se representaba una plantilla normal de Page cannot be found .
Ambos caminos funcionan. Todo se reduce a cómo desea que funcione su aplicación y cómo creará las páginas que crean los usuarios.
Hay mucha más documentación y ejemplos sobre cómo crear componentes dinámicos desde la solución que se me ocurrió en la versión 2 rc4. No he usado ninguno de estos, pero parece útil:
Paquete NPM para componentes dinámicos
Documentos angulares en el cargador de componentes dinámicos