我正在 AngularJS 中开发一个文件编辑应用程序。我的网址如下所示:
#/文件名.md
或者
#/文件夹/文件名.md
或者
#/文件夹/嵌套文件夹/另一个文件夹/itgoesonforever/filename.MD
我不想为每个深度都做一条路线,它可能有大约 15 条路线深。有没有办法有条件路线?粗略地说:
/:fileorfolder?/:fileorfolder?/:fileorfolder?/:fileorfolder?
我认为你可以用 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
参数。
我想我明白了!诀窍是将模板设置为 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';
});
您可以查看使用 routeProvider#otherwise 功能
$routeProvider
.otherwise({controller: 'FileEditor',...});