Actualmente tengo una aplicación AngularJS con enrutamiento integrado. Funciona y todo está bien.
Mi archivo app.js se ve así:
angular.module('myapp', ['myapp.filters', 'myapp.services', 'myapp.directives']).
config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/', { templateUrl: '/pages/home.html', controller: HomeController });
$routeProvider.when('/about', { templateUrl: '/pages/about.html', controller: AboutController });
$routeProvider.when('/privacy', { templateUrl: '/pages/privacy.html', controller: AboutController });
$routeProvider.when('/terms', { templateUrl: '/pages/terms.html', controller: AboutController });
$routeProvider.otherwise({ redirectTo: '/' });
}]);
Mi aplicación tiene un CMS integrado donde puede copiar y agregar nuevos archivos html dentro del directorio / pages .
Me gustaría seguir pasando por el proveedor de enrutamiento, incluso para los nuevos archivos agregados dinámicamente.
En un mundo ideal, el patrón de enrutamiento sería:
$ routeProvider.when ( '/ nombre de la página ', {templateUrl: '/ pages / nombre de la página html', el controlador: CMSController});
Entonces, si mi nuevo nombre de página era "contact.html", me gustaría que angular seleccionara "/ contact" y lo redireccionara a "/pages/contact.html".
¿Es esto siquiera posible? y si es así, ¿cómo?
Actualizar
Ahora tengo esto en mi configuración de enrutamiento:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
y en mi CMSController:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
Esto establece el templateUrl actual en el valor correcto.
Sin embargo , ahora me gustaría cambiar la vista ng con el nuevo valor templateUrl. ¿Cómo se logra esto?