Angular 2: Como passar parâmetros de rota para o sub-roteamento?

Suco de besouro

Usando Angular 2 rc.1 e TypeScript. Estou tendo muitos problemas para passar parâmetros de roteamento para meu componente quando o componente é carregado em um sub-roteamento. Eu uso o @angular/router-deprecatedpacote.

No meu componente raiz , configurei as rotas da seguinte forma:

@RouteConfig([
  {path:'/top', name:'Top', component: EndPointComponent},
  {path:'/sub/...', name:'Sub', component: MiddleManComponent}
])

Aqui está o componente do endpoint, onde tento ler os parâmetros

import {Component} from '@angular/core';
import {RouteParams} from '@angular/router-deprecated';
@Component({
    template: 'Route Params: {{routeParams.params | json}}'
})
export class EndPointComponent{
    constructor(private routeParams:RouteParams){}
}

Aqui está o componente intermediário com o subrotamento para EndPointComponent

import {Component} from '@angular/core';
import {RouteConfig, ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {EndPointComponent} from "./endpoint.component";

@Component({
    directives: [ROUTER_DIRECTIVES]
    template: `<router-outlet></router-outlet>`
})
@RouteConfig([
    {path: '/end', name: 'End', component: EndPointComponent, useAsDefault: true}
])
export class MiddleManComponent {}

Os parâmetros podem ser lidos com sucesso a partir do routeParamsobjeto de EndPointComponentquando o componente é carregado a partir da rota de nível superior (por exemplo: a rota chamada 'Top' no componente raiz). No entanto, os parâmetros estão sempre vazios quando eu navego para EndPointComponentir através MiddleManComponent(por exemplo: através da rota chamada 'Sub' no componente raiz).

Os roteadores filhos apagam os parâmetros dos pais antes de resolver as rotas? Isso não faz muito sentido, então aposto que estou perdendo alguma coisa. Minha pergunta é simples: como faço para passar parâmetros de rota para um sub-rota?

PS: Tentei construir um plunker para demonstrar essa configuração, mas desisti quando não consegui descobrir por que o aplicativo não carrega.

um homem sábio

As rotas secundárias, na verdade, obtêm sua própria instância de RouteParams, diferente da rota primária. Isso é feito para evitar colisões de nomenclatura e facilitar o encapsulamento do componente roteado.

Uma maneira de compartilhar os parâmetros de uma rota primária com um componente carregado por uma rota secundária é por meio de um serviço.

@Injectable()
export class RouteParamService {
  constructor(private routeParams: RouteParams) {}

  get params() {
    return this.routeParams.params;
  }
}

@Component({
    template: 'Route Params: {{routeParams.params | json}}'
})
export class EndPointComponent{
    constructor(private routeParams:RouteParamService){}
}

@Component({
  directives: [ROUTER_DIRECTIVES]
  template: `<router-outlet></router-outlet>`,
  providers: [RouteParamService]
})
@RouteConfig([
  {path: '/end', name: 'End', component: EndPointComponent, useAsDefault: true}
])
class MiddleManComponent() { }

O RouteParamService será instanciado no mesmo nível de rota que o MiddleManComponent e, portanto, obterá a mesma instância de RouteParams. Quando seu serviço for injetado em seu componente de rota filho, você poderá acessar os parâmetros de rota pai.

Se você precisar de 2 instâncias de EndPointComponent para carregar em diferentes níveis de árvore de rota, você precisará de outro nível de rota primária, eu acho; ou seja, um componente roteado que encapsula MiddleManComponent e EndPointComponent, entre RootComponent.

RootComponent não é roteado, portanto, você não poderá instanciar RouteParams para o RouteParamService a partir dele. RouteParams é fornecido pelo <router-outlet>componente.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como passar parâmetros de rota para o webcontroller no Laravel?

Angular 2 - Passar parâmetros para a rota

Configuração de roteamento Angular2 (rota com dois parâmetros)

Como passar vários parâmetros para a rota raiz no Angular

Como passar vários parâmetros para a rota raiz no Angular

Como passar parâmetros de postagem em laravel da rota para o controlador?

Passar strings como parâmetros de rota em Angular sem codificação

Força a transição de rota para a mesma rota com parâmetros diferentes em Angular 2

como passar o parâmetro de rota laravel para vue

Passar parâmetro de rota para componente filho como entrada em Angular 2

Como testar a unidade de parâmetros de roteamento Angular 2

Como passar parâmetros renderizados do back-end para o método de inicialização angular2

Como definir o indicador de carga para tubo de parâmetros de rota angular *

como escrever caso de teste para parâmetros de rota ativados angular2

Como definir parâmetros de consulta padrão para Rota no Angular 7?

Como passar 2 parâmetros para EventEmitter angular2

Como passar parâmetros para um serviço de solicitação $ http no Angular 1?

Como passar os parâmetros da solicitação de volta para o Angular

Angular 2 - teste para mudança nos parâmetros de rota

Angular2: gerador de rota para '...' não foi incluído nos parâmetros passados

Grails 3 e angular - Como passar parâmetros de entrada para o controlador de backend

Parâmetro de rota padrão Angular2: roteamento aninhado

Lúmen: como passar parâmetros para o controlador da rota

Como passar esses 2 parâmetros para o método de ação do controlador?

Como passar parâmetros para a restrição de validação personalizada no Symfony 2

Como passar parâmetros para uma rota Camel?

Como passar parâmetros do jQuery para a rota laravel

Como passar uma matriz de objetos de uma rota para outra rota no EmberJS (sem usar parâmetros de consulta)

Como passar dinamicamente as coordenadas de roteamento para o roteamento de folheto usando ganchos de reação

TOP lista

  1. 1

    Obtendo apenas o número de uma String C #

  2. 2

    como acessar a conexão do banco de dados em visualizações no codeigniter 4

  3. 3

    Como redimensionar tabelas geradas pelo Stargazer no R Markdown?

  4. 4

    recuperar valores em uma linha de dataframes com base no valor em outro

  5. 5

    Firebase Storage Web: como fazer upload de um arquivo

  6. 6

    为什么在使用argc和argv时不会出现分段错误?

  7. 7

    Como agrupar objetos em uma lista em outras listas por atributo usando streams e Java 8?

  8. 8

    Qual é a diferença entre o tamanho do passo e a taxa de aprendizado no aprendizado de máquina?

  9. 9

    Por que definir a variável como uma string vazia não é necessária em meu código?

  10. 10

    Insert a value to hidden input Laravel Blade

  11. 11

    Configure o coletor de arquivos Serilog para usar um arquivo de log por execução do aplicativo

  12. 12

    Como ler arquivos yaml em laravel?

  13. 13

    Série Fibonacci usando programação dinâmica

  14. 14

    Como adicionar elementos a um array multidimensional em PHP?

  15. 15

    How do I set an IronPython ctypes c_char_p pointer to an absolute address that is not a valid memory address to read from?

  16. 16

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  17. 17

    Como faço para que um formulário no Access se torne uma janela pop-up?

  18. 18

    Como anexar um arquivo a um e-mail usando JavaMail

  19. 19

    Adicionar campos de texto dinâmicos por meio da seleção suspensa de componentes?

  20. 20

    如何使用SOM算法进行分类预测

  21. 21

    TypeError não capturado: não é possível atribuir a propriedade somente leitura

quentelabel

Arquivo