Навигация с параметрами в последнем NativeScript с Angular и TypeScript

typescript angular navigation nativescript

7499 просмотра

1 ответ

2424 Репутация автора

Я хочу перейти на другую страницу с параметрами, но не могу найти документацию, которая это хорошо объясняет. Я использую маршруты. Вот пример моих маршрутов.

import { RouterConfig } from '@angular/router';
import { nsProvideRouter } from 'nativescript-angular/router';
import { MainPage } from './pages/main/main.component';
import { DetailsPage } from './pages/details/details.component';

export const routes: RouterConfig = [
    { path: "", component: MainPage },
    { path: "details", component: DetailsPage }
];

export const APP_ROUTER_PROVIDERS = [
    nsProvideRouter(routes, {})
];

Я хочу перейти на DetailsPage с параметрами того, что было выбрано на MainPage. Вот выдержка из MainPage:

import { Page } from 'ui/page';
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { Entity } from '../../shared/entity/entity';

@Component({
    selector: "main",
    templateUrl: "pages/main/main.html",
    styleUrls: ["pages/main/main-common.css", "pages/main/main.css"]
})
export /**
 * MainPage
 */
class MainPage {

    constructor(private _page: Page, private _router: Router) { }

    onNavigate(selectedItem: Entity) {
        // Can't figure out how to get selectedItem to details…
        this._router.navigate(["/details"]);
    };
}

Вставлено: Ниже я добавил класс детализации.

import { Component, OnInit, OnDestroy } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Entity } from '../../shared/entity/entity';
import { EntityModel } from '../../shared/entity/entity.model';

@Component({
    selector: "detail",
    templateUrl: "pages/detail/detail.html",
    styleUrls: ["pages/detail/detail-common.css", "pages/detail/detail.css"],
    providers: [EntityModel] 
})
export /**
 * DetailPage
 */
class DetailPage implements OnInit, OnDestroy {

    entity: Entity;

    private _paramSubcription: any;

    constructor( private _activatedRoute: ActivatedRoute, private _entityModel: EntityModel ) { }

    ngOnInit() {
        console.log("detail ngOnInit was called.");
        let entityName: string;
        this._paramSubcription = this._activatedRoute.params.subscribe(params => entityName = params['id']);
        this.entity = this._entityModel.entityNamed(entityName);
    };

    ngOnDestroy() {
        if (this._paramSubcription) {
            this._paramSubcription.unsubscribe();
        };
    };
}

Вот шаблон для деталей:

<ActionBar [title]="entity.name"></ActionBar>
<ListView [items]="entity.items">
    <Template let-item="item">
        <StackLayout>
            <Label [text]="item.name"></Label>
            <Label [text]="item.description"></Label>
        </StackLayout>
    </Template>
</ListView>

Я нашел такие классы, как a NavigationContextи методы navigateToи navigateFrom, но я не понял, как отправить NavigationContextих в Page. Или если это даже должно быть отправлено таким образом. Таким образом, вопрос заключается в том, какой лучший способ использовать Routingдля перехода на другую страницу (не диалоговое окно) и передачи параметров?

Автор: Rob Источник Размещён: 18.07.2016 06:13

Ответы (1)


10 плюса

1718 Репутация автора

Решение

Вы должны указать, что у вас должны быть параметры в этом маршруте:

export const routes: RouterConfig = [
    { path: "", component: MainPage },
    { path: "details/:id", component: DetailsPage }
];

тогда вы можете передать это так:

this._router.navigate(["/details", selectedItem.id]);

в вашем DetailsPageвы можете получить параметры как наблюдаемые с ActivatedRouteуслугой.

Автор: Doron Brikman Размещён: 18.07.2016 07:02
Вопросы из категории :
32x32