AngularJS全能路线?

wes*_*bos 6 routes angularjs

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

#/ fileName.md

要么

#/文件夹/ fileName.md

要么

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

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

/:fileorfolder?/:fileorfolder?/:fileorfolder?/:fileorfolder?
Run Code Online (Sandbox Code Playgroud)

Mar*_*cok 15

我认为你可以用Angular做的最好的是*,从$ routeProviderv1.1.5开始是新的 :

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

你必须自己解析这个largecode参数.

  • 现在,在更新版本的angular中,它已更改为`:name*`. (2认同)

df-*_*ean 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';
});
Run Code Online (Sandbox Code Playgroud)