AngularJS全能路线?

时间:2013-07-10 17:15:33

标签: angularjs routes

我正在开发AngularJS中的文件编辑应用程序。我的网址看起来像这样:

  

#/ fileName.md

  

#/文件夹/ fileName.md

  

#/文件夹/嵌套文件夹/另一个文件夹/ itgoesonforever / filename.MD

我不想为每一个深度做一条路线,它可能是~15条路线深。有没有办法有条件路线?粗暴地说:

/:fileorfolder?/:fileorfolder?/:fileorfolder?/:fileorfolder?

3 个答案:

答案 0 :(得分:15)

我认为使用Angular可以做的最好的事情是*,这是v1.1.5 of $routeProvider的新内容:

  

path可以包含以星号(*name)开头的命名组。当路线匹配时,所有字符都急切地存储在给定名称下的$routeParams中   例如,/color/:color/largecode/*largecode/edit等路线将匹配/color/brown/largecode/code/with/slashes/edit并提取:
     - color: brown
     - largecode: code/with/slashes

你必须自己解析largecode param。

答案 1 :(得分:6)

我想我明白了!诀窍是将模板设置为简单模板,然后修改范围以包含模板的动态路径。

现在我可以在/foo/bar/baz.html放置一个文件,然后转到server.com/foo/bar/baz查看呈现的模板。

// Routes
app.config( function($routeProvider) {
    $routeProvider

    // Home
    .when( '/', {
        templateUrl: 'home.html',
        controller: 'HomeController'
    })

    // Catch All
    .when( '/:templatePath*', {
        template: '<ng-include src="templatePath"></ng-include>',
        controller: 'CatchAllCtrl'
    })

});

// Catch All Controller
app.controller("CatchAllCtrl", function($scope, $routeParams) {
    $scope.templatePath = $routeParams.templatePath + '.html';
});

答案 2 :(得分:2)

您可以查看使用routeProvider#otherwise functions

  $routeProvider
    .otherwise({controller: 'FileEditor',...});

http://docs.angularjs.org/api/ng.$routeProvider