我目前拥有一个带路由的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('/页面名称', { templateUrl: '/pages/页面名称.html', controller: CMSController });
因此,如果我的新页面名称是“contact.html”,我希望Angular能够选择“/contact”并重定向到“/pages/contact.html”。
这是否可能?如果可能的话,怎么做呢?!
更新
现在我在我的路由配置中加入了以下内容:
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })
而在我的CMS控制器中:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];
这将当前的templateUrl设置为正确的值。
然而,我现在想用新的templateUrl值来更改ng-view。如何实现这一点?
urlattr
是从哪里设置或发送的,我的意思是urlattr.name
会产生什么结果?(注意:这是尽可能简洁地翻译,没有其他额外内容。) - Sami