首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS动态路由

AngularJS动态路由
EN

Stack Overflow用户
提问于 2012-12-03 10:15:53
回答 7查看 159K关注 0票数 88

我目前有一个内置路由的AngularJS应用程序。它起作用了,一切正常。

我的app.js文件如下所示:

代码语言:javascript
复制
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“。

这有可能吗!如果是的话,怎么做?!

更新

现在,我的路由配置中包含了以下内容:

代码语言:javascript
复制
$routeProvider.when('/page/:name', { templateUrl: '/pages/home.html', controller: CMSController })

在我的CMSController中:

代码语言:javascript
复制
function CMSController($scope, $route, $routeParams) {
    $route.current.templateUrl = '/pages/' + $routeParams.name + ".html";
    alert($route.current.templateUrl);
}
CMSController.$inject = ['$scope', '$route', '$routeParams'];

这将当前templateUrl设置为正确的值。

不过,现在我想用新的templateUrl值更改ng视图。这是如何完成的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-05-22 13:14:50

代码语言:javascript
复制
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'
        });
    }
]);
  • 添加*让您动态地使用多级目录。示例:/page/cars/selling/list将被此提供程序捕获

来自文档(1.3.0):

“如果templateUrl是一个函数,则将使用以下参数调用它: {Array.} -应用当前路由从当前$location.path()中提取路由参数“

也是

何时(路径、路线):方法

  • 路径可以包含以冒号开头、以星号结尾的命名组:例如:name*。当路由匹配时,所有字符都将以给定的名称急切地存储在$routeParams中。
票数 133
EN

Stack Overflow用户

发布于 2012-12-03 11:02:25

好的解决了。

向GitHub - http://gregorypratt.github.com/AngularDynamicRouting添加了解决方案。

在我的app.js路由配置中:

代码语言:javascript
复制
$routeProvider.when('/pages/:name', {
    templateUrl: '/pages/home.html', 
    controller: CMSController 
});

然后在我的CMS控制器中:

代码语言:javascript
复制
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,这样就可以注入动态内容。

票数 37
EN

Stack Overflow用户

发布于 2013-05-10 06:20:52

我认为做这种事情的最简单的方法是稍后解决路由,例如,您可以通过json询问路由。请检查我是否在配置阶段通过$routeProvider通过$provide创建了一个工厂,这样我就可以在运行阶段甚至在控制器中继续使用$routeProvider对象。

代码语言:javascript
复制
'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();
    });
});
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13681116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档