2013-07-10 26 views
5

Tôi đang làm việc trên một ứng dụng chỉnh sửa tệp trong AngularJS. url của tôi trông như thế này:AngularJS bắt tất cả tuyến đường?

#/fileName.md

hoặc

#/thư mục/fileName.md

hoặc

#/thư mục/thư mục lồng nhau/khác-fol der/itgoesonforever/filename.MD

Tôi không muốn phải thực hiện lộ trình cho từng độ sâu và có thể có ~ 15 tuyến đường sâu. Có cách nào để có tuyến đường có điều kiện không? Thô sơ:

/:fileorfolder?/:fileorfolder?/:fileorfolder?/:fileorfolder? 
+0

Giống như *? (fi – Ven

+0

Xin lỗi? Bạn có thể giải thích? – wesbos

+0

Tôi chưa bao giờ sai lầm với định tuyến của Angular, nhưng tôi đã đọc bộ định tuyến của dự án Giao diện người dùng góc: https://github.com/angular-ui/ui-router Điều đó có giải quyết được nhu cầu của bạn không ? –

Trả lời

15

Tôi nghĩ rằng tốt nhất bạn có thể làm với góc là *, đó là mới tính đến v1.1.5 of $routeProvider:

path có thể tiếp tục ain có tên là các nhóm bắt đầu với một ngôi sao (*name). Tất cả các ký tự được lưu trữ háo hức trong $routeParams dưới tên đã cho khi tuyến phù hợp.
Ví dụ, các tuyến đường như /color/:color/largecode/*largecode/edit sẽ phù hợp /color/brown/largecode/code/with/slashes/edit và chiết xuất:
- color: brown
- largecode: code/with/slashes

Bạn sẽ phải phân tích largecode param mình mặc dù.

+0

Wow, chính xác những gì tôi muốn.Tôi thậm chí không phải làm bất kỳ tham gia kỳ lạ sau khi thực tế là tất cả thông qua – wesbos

+2

Điều này đã được thay đổi thành ': name *' trong các phiên bản gần đây của góc. –

2

Bạn có thể xem xét sử dụng các routeProvider # khác chức năng

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

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

+0

Tôi nghĩ về việc này, nhưng tôi không có routeParams sau đó, mà buggers lên ứng dụng của tôi – wesbos

6

Tôi nghĩ mình đã hiểu! Bí quyết là đặt mẫu thành đơn giản, sau đó sửa đổi phạm vi để bao gồm đường dẫn động vào mẫu của bạn.

Vì vậy, bây giờ tôi có thể đặt một tệp tại /foo/bar/baz.html và xem mẫu được hiển thị bằng cách truy cập 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'; 
}); 
Các vấn đề liên quan