Obecnie mam aplikację AngularJS z wbudowanym routingiem. Działa i wszystko jest w porządku.
Mój plik app.js wygląda następująco:
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: '/' });
}]);
Moja aplikacja ma wbudowany CMS, w którym możesz kopiować i dodawać nowe pliki html w katalogu / pages .
Chciałbym nadal przechodzić przez dostawcę routingu, chociaż nawet dla nowych dynamicznie dodawanych plików.
W idealnym świecie wzorzec routingu wyglądałby tak:
$ routeProvider.when ('/ nazwa strony ', {templateUrl: '/ strony / nazwa strony .html', kontroler: CMSController});
Jeśli więc moja nowa nazwa strony brzmiała „contact.html”, chciałbym, aby angular odebrał „/ contact” i przekierował do „/pages/contact.html”.
Czy to w ogóle możliwe ?! a jeśli tak, to jak ?!
Aktualizacja
Mam teraz to w mojej konfiguracji routingu:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
aw moim CMSController:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
Spowoduje to ustawienie bieżącego templateUrl na właściwą wartość.
Jednak chciałbym teraz zmienić widok ng z nową wartością templateUrl. Jak to się robi?