Atualmente, tenho um aplicativo AngularJS com roteamento integrado. Funciona e está tudo ok.
Meu arquivo app.js tem esta aparência:
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: '/' });
}]);
Meu aplicativo tem um CMS integrado onde você pode copiar e adicionar novos arquivos html dentro do diretório / pages .
Eu gostaria ainda de passar pelo provedor de roteamento, embora até mesmo para os novos arquivos adicionados dinamicamente.
Em um mundo ideal, o padrão de roteamento seria:
$ routeProvider.when ('/ pagename ', {templateUrl: '/ pages / pagename .html', controlador: CMSController});
Portanto, se o nome da minha nova página fosse "contact.html", gostaria que o angular pegasse "/ contact" e redirecionasse para "/pages/contact.html".
Isso é mesmo possível ?! e se sim como ?!
Atualizar
Agora tenho isso em minha configuração de roteamento:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
e no meu CMSController:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
Isso define o templateUrl atual com o valor correto.
No entanto , agora gostaria de alterar o ng-view com o novo valor templateUrl. Como isso é feito?