2017-09-27 19 views
6

Để có phần giới thiệu tốt hơn, hãy xem blog post about outlets.Bản ghi: Điều hướng giữa các bộ định tuyến

Tôi sử dụng một TabView để điều hướng thông qua ứng dụng di động của tôi được viết bằng nativescript (ProtectedComponent).

<TabView 
    #tabView 
    tabsBackgroundColor="#f57c00" selectedTabTextColor="#B23010" 
    [(ngModel)]="selectedIndex" 
    (selectedIndexChanged)="tabViewIndexChange(tabView.selectedIndex)"> 

    <StackLayout *tabItem="{iconSource: 'res://tab-icons/cats'}"> 
    <cats-tab></cats-tab> 
    </StackLayout> 

    <StackLayout *tabItem="{iconSource: 'res://tab-icons/dogs'}"> 
    <dogs-tab></dogs-tab> 
    </StackLayout> 
</TabView> 

Đây là một phần của mã thành phần có liên quan cho điều hướng:

navigateToCatsRoot() { 
    this.router.navigate([ 
    '/protected', 
    { outlets: { catOutlet: ['cats'] } } 
    ]); 
} 

navigateToDogsRoot() { 
    this.router.navigate([ 
    '/protected', 
    { outlets: { dogOutlet: ['dogs'] } } 
    ]); 
} 

tabViewIndexChange(index: number) { 
    switch(index) { 
    case 0: 
     this.navigateToCatsRoot(); 
     break; 
    case 1: 
     this.navigateToDogsRoot(); 
     break; 
    } 
} 

Mỗi tab chỉ chứa các cấu hình bộ định tuyến lối thoát, ví dụ:

<router-outlet name="catOutlet"></router-outlet> 

Các định tuyến được thiết lập trong theo cách sau:

{ path: "", redirectTo: "/login", pathMatch: "full" }, 
{ path: "login", component: LoginComponent }, 
{ path: 'protected', component: ProtectedComponent, children: [ 
    { path: 'cats', component: CatsComponent, outlet: 'catOutlet'}, 
    { path: 'cat/:id', component: CatDetailComponent, outlet: 'catOutlet'}, 
    { path: 'dogs', component: DogsComponent, outlet: 'dogOutlet'}, 
    { path: 'dog/:id', component: DogDetailComponent, outlet: 'dogOutlet'}, 
    ]}, 

Điều hướng tab hoạt động như một nét duyên dáng. Tôi có thể điều hướng thông qua điều hướng tab đến các cửa hàng khác nhau và tôi cũng có thể điều hướng từ một cửa hàng đến một trang chi tiết của cửa hàng đó:

this.router.navigate(
    ['/protected', { outlets: { catOutlet: ['cat', cat.id] } }] 
); 

Sự cố tôi đang gặp phải ngay khi tôi đang cố gắng nhảy từ một chế độ xem chi tiết trong một cửa hàng vào chế độ xem chi tiết khác của cửa hàng kia. Vì vậy, nếu tôi gọi những điều sau đây từ chế độ xem chi tiết của mèo:

this.router.navigate(
    ['/protected', { outlets: { dogOutlet: ['dog', dog.id] } }] 
); 

Tôi không gặp phải bất kỳ lỗi nào nhưng không có gì xảy ra. Ngay sau khi tôi chuyển sang ổ cắm bằng cách sử dụng điều hướng tab (vẫn hoạt động) tôi thấy chế độ xem chi tiết của con chó trong một thời gian rất ngắn trước khi cài đặt lại tổng quan về chó (đó là điều hướng tab nên làm).

Điều này có nghĩa là dogOutlet thực sự được cập nhật với điều hướng và thành phần phù hợp nhưng không chuyển sang chế độ xem/đầu ra. Thành phần được tải, tôi đã xác minh rằng bằng cách đăng nhập vào chế độ xem OnInit của chi tiết con chó. Nó chỉ không chuyển sang ổ cắm đó và cho thấy ổ cắm đó.

Làm cách nào để không chỉ cập nhật ổ cắm đó mà còn chuyển sang cửa hàng vì nó hoạt động cho các thành phần tổng quan như với chế độ xem tab?

Trả lời

0

Tôi đã đăng câu hỏi lên github repository as an issue và nhận câu trả lời.

Vấn đề là điều hướng thực sự đã thay đổi, nhưng selectedIndex của TabView không thay đổi. Khi làm điều này ngoài việc thay đổi điều hướng, mọi thứ đều hoạt động!

let tabView:TabView = <TabView>this.page.getViewById("tabView"); 
tabView.selectedIndex = 2; 
Các vấn đề liên quan