Сейчас у меня есть приложение AngularJS со встроенной маршрутизацией. Оно работает, и все в порядке.
Мой файл app.js выглядит так:
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: '/' });
}]);
В мое приложение встроена CMS, где вы можете копировать и добавлять новые html-файлы в каталог / pages .
Я хотел бы по-прежнему пройти через поставщика маршрутизации, хотя даже для новых динамически добавляемых файлов.
В идеальном мире схема маршрутизации была бы такой:
$ routeProvider.when ('/ pagename ', {templateUrl: '/ pages / pagename .html', controller: CMSController});
Так что, если бы мое новое имя страницы было «contact.html», я бы хотел, чтобы angular взял «/ contact» и перенаправил на «/pages/contact.html».
Возможно ли такое ?! и если да, то как ?!
Обновить
Теперь у меня есть это в моей конфигурации маршрутизации:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
и в моем CMSController:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
Это устанавливает для текущего templateUrl правильное значение.
Однако теперь я хотел бы изменить ng-view с новым значением templateUrl. Как это достигается?