2017-08-23 4 views
0

私は/my/route/80004角:空のルートのparam利回りエラーのルートをアクティブ化します。ヌル「あなたが提供する 『』ストリームが期待されていた...」

に行けばそれは動作します。

しかし、私はノールートのparamsで/my/routeに移動しようとすると、私はエラーを取得する:

You provided 'null' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

ngOnInit() { 
    // the observable method 
    this.route.paramMap 
    .switchMap((params: ParamMap) => { 
     this.number = params.get('number'); 
     return params.get('number'); 
    }) 
    .subscribe((number) => { return; }); 
} 

ルート

export const routes: Routes = [{ 
    path : 'my', 
    children: [{ 
     path  : '', 
     pathMatch : 'full', 
     redirectTo: 'route' 
    }, { 
     path  : 'route', 
     component: SubscriberRegisterComponent, 
    }, { 
     path  : 'route/:number', // gets the route parameters 
     component: SubscriberRegisterComponent, 
    }] 
}]; 

私は私を訪問することはできませんどのように来ますルートパラメータなしで直接ルートを作成しますか?私は上記の観察可能な方法をコメントアウトしてから、私は空のparams

this.number = this.route.snapshot.paramMap.get('number '); 

答えて

1

.switchMap()と私のルートを訪問することができthe no-observable methodを使用する場合は

は観測を返すべき関数を取ります。代わりに、あなたはのparam値を返すしている:

this.route.paramMap 
    .switchMap((params: ParamMap) => { 
     this.number = params.get('number'); 
     return params.get('number'); 
    }) 

あなたはまた、(クラスのプロパティを設定するために)仕事をするためにswitchMapを使用しているのが、観測を購読する方法で行われる作業のために設計されている(または.do()オペレータ)。

this.route.paramMap.subscribe((params:ParamMap) => { 
    this.number = +params.get('number'); 
}); 

サイドローとして、経路がパラメータを取ることがあり、時にはそうでない場合は、2度定義する必要はありません。オプションのパラメータは、ルート定義に含めることを意図しない。

{ 
    path  : 'route', 
    component: SubscriberRegisterComponent, 
} 

オプションパラメータの使用方法を学びます。それらはまだparamMapに利用可能です。 See the docs

+0

ありがとう、それはそれを解決しました。作業のために '.do()'と '.subscribe()'を使うことを覚えています。 – TetraDev

関連する問題