7

我正在 AngularJS 中开发一个文件编辑应用程序。我的网址如下所示:

#/文件名.md

或者

#/文件夹/文件名.md

或者

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

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

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

3 回答 3

15

我认为你可以用 Angular 做的最好的事情是*,这是 $routeProvider v1.1.5 的新功能:

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

不过,您必须自己解析largecode参数。

于 2013-07-10T17:50:46.193 回答
6

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

所以现在我可以放置一个文件/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';
});
于 2014-05-20T21:58:00.400 回答
2

您可以查看使用 routeProvider#otherwise 功能

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

http://docs.angularjs.org/api/ng.$ro​​uteProvider

于 2013-07-10T17:26:41.650 回答