Tôi đang cố gắng viết dịch vụ DataResolver
cho phép bộ định tuyến Angular 2 tải trước dữ liệu trước khi khởi tạo thành phần của tôi.Góc 2: chuyển giá trị cho dữ liệu tuyến đường giải quyết
Trình phân giải cần gọi các điểm cuối API khác nhau để tìm nạp dữ liệu phù hợp với tuyến đang được tải. Thay vì có trình phân giải cho từng thành phần của tôi, tôi đang xây dựng một trình phân giải chung. Vì vậy, tôi muốn chuyển đầu vào tùy chỉnh trong định nghĩa tuyến đường trỏ tới điểm cuối chính xác. Ví dụ, hãy xem xét các đường bay:
app.routes.ts
appRoutes = [
{
path: 'project/:id',
component: ProjectComponent,
resolve: { data: DataResolver }
},
{
path: 'store/:id',
component: StoreComponent,
resolve: { data: DataResolver }
}
]
Trong trường hợp đầu tiên, resolver sẽ cần phải gọi /path/to/resource1/id
. Trong trường hợp thứ hai, /path/to/resource2/id
. Lý tưởng nhất, tôi sẽ vượt qua điểm cuối làm đối số trong định nghĩa tuyến đường mà sau đó sẽ có sẵn trong hàm tạo DataResolver
.
Điều này có thể được thực hiện với lớp phân giải chung không?
Angular 2.0.1
viết bằng Typescript 2.0.3
trong dòng cuối cùng - 'route.data ['path']', sẽ ': id' được tự động thay thế bằng tham số tuyến hiện tại hay nó sẽ là chuỗi ký tự 'project /: id'? – BeetleJuice
Không. Tôi đoán tôi đã hiểu nhầm câu hỏi của bạn. Tôi mặc dù đó là những gì bạn muốn. Chỉ cần lấy 'url' từ' route'. Nó sẽ là một 'UrlSegment []'. 'url [1] .path' phải có id và' url [0] .path' phải là 'project' –
Tôi có thể đã thực hiện một công việc tốt hơn để giải thích. 'resolve()' sẽ gọi API và trả về Observable sẽ phát ra dữ liệu được trả về bởi máy chủ. Thách thức của tôi là điểm cuối API để gọi phụ thuộc vào thành phần có dữ liệu được giải quyết. Câu trả lời của bạn là hữu ích mặc dù. Tôi có thể sử dụng thuộc tính 'data' của route để tạo các đầu vào tùy chỉnh có sẵn cho' resolve() '. Cảm ơn. – BeetleJuice