我目前有一个内置路由的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,您可以在其中复制并在/pages目录中添加新的html文件。
我仍然想通过路由提供程序,即使是对新的动态添加的文件。
在理想世界中,路由模式将是:
$routeProvider.when('/pagename',{ templateUrl:'/pages/pagename.html',控制器: CMSController };
因此,如果我的新页面名为"contact.html“,那么我希望能够取起"/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设置为正确的值。
不过,现在我想用新的templateUrl值更改ng视图。这是如何完成的?
发布于 2014-05-22 13:14:50
angular.module('myapp', ['myapp.filters', 'myapp.services', 'myapp.directives']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/page/:name*', {
templateUrl: function(urlattr){
return '/pages/' + urlattr.name + '.html';
},
controller: 'CMSController'
});
}
]);来自文档(1.3.0):
“如果templateUrl是一个函数,则将使用以下参数调用它: {Array.} -应用当前路由从当前$location.path()中提取路由参数“
也是
何时(路径、路线):方法
发布于 2012-12-03 11:02:25
好的解决了。
向GitHub - http://gregorypratt.github.com/AngularDynamicRouting添加了解决方案。
在我的app.js路由配置中:
$routeProvider.when('/pages/:name', {
templateUrl: '/pages/home.html',
controller: CMSController
});然后在我的CMS控制器中:
function CMSController($scope, $route, $routeParams) {
$route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
$.get($route.current.templateUrl, function (data) {
$scope.$apply(function () {
$('#views').html($compile(data)($scope));
});
});
...
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];#视图是我的<div id="views" ng-view></div>
因此,现在它可以使用标准路由和动态路由.。
为了测试它,我复制了名为about.html的portfolio.html,更改了它的一些内容,并在浏览器中输入了/#/pages/portfolio,然后就显示了portfolio.html .
更新后的在html中添加了$apply和$compile,这样就可以注入动态内容。
发布于 2013-05-10 06:20:52
我认为做这种事情的最简单的方法是稍后解决路由,例如,您可以通过json询问路由。请检查我是否在配置阶段通过$routeProvider通过$provide创建了一个工厂,这样我就可以在运行阶段甚至在控制器中继续使用$routeProvider对象。
'use strict';
angular.module('myapp', []).config(function($provide, $routeProvider) {
$provide.factory('$routeProvider', function () {
return $routeProvider;
});
}).run(function($routeProvider, $http) {
$routeProvider.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
}).otherwise({
redirectTo: '/'
});
$http.get('/dynamic-routes.json').success(function(data) {
$routeProvider.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
});
// you might need to call $route.reload() if the route changed
$route.reload();
});
});https://stackoverflow.com/questions/13681116
复制相似问题