angular - Angular2 ActivatedRoute-parameter är odefinierad


Försöker visa värdet av aktivera ruttparametern på skärmen men det misslyckas

I den första komponenten har jag

<ul *ngFor="let cate of categories;">
  <li (click)="onviewChecklists(cate.id)">
     <a> {{i+1}} {{cate.category}} </a>
  </li>

</ul>

  onviewChecklists(category:string){
     this._router.navigate(["tsafety/checklist-management/categories/items",
       {category:category}])
 }

Nu på den andra komponenten till där jag navigerar

category:any;

constructor(
private _router:Router,private activeRoute:ActivatedRoute
 ) {

 }

ngOnInit() {

   this.category = this.activeRoute.snapshot.params['category'];
   console.log(this.category);  //this works
} 
//on this component html {{category}} returns only the first param

I den andra komponentens html-fil, när jag {{category}}, visas endast värdet av den första routingen, det vill säga

navigate 1 param is checklist display is checklist
navigate 2 param is newcheck  display is checklist

Vad kan vara fel eftersom console.log() skriver ut rätt värde men {{category}} bara skriver ut det första värdet

I den andra komponenten har jag också försökt

ngOnInit() {
 this.onGetItems(+this.activeRoute.snapshot.params['category']);

 }

 onGetItems(category){
    return this._checklistitemsService.getAllItems(category)
    .subscribe(
       res=>{
         this.checklistitems = res
    }
  )

Metoden onGetItems anropas bara en gång

Svar #1

När du passerar en ruttparameter och gör ett serviceanrop med den parametern, bör du använda ett Observable<params> för att prenumerera på den aktiverade rutten i din konstruktor enligt nedan

category: number = 0;
constructor(private route:ActivatedRoute, 
            private checklistitemsService: CheckListItemsService) {

    this.sub = this.route.params.subscribe(params => {

            this.category = + params['category'];
              ......

    });
}

Då bör ditt servicemeddelande göras i ngOnInit()

ngOnInit(){
      this._checklistitemsService.getAllItems(category)
          .subscribe(res => {
                          this.checklistitems = res
           }
}

Misstag:

Om du hämtar ruttparametrarna i ngOnInit, kommer dina komponenter att laddas innan ruttvärdet hämtas, så du kommer att märka en tydlig försening och därför förblir din this.checklistitems utan värde.

Min lösning:

Genom att hämta ruttparametrarna i konstruktören, kommer ngOnInit inte att köras förrän ruttparametern har hämtats och därigenom görs ett servicelcall för att få detta.checklistitems. Nu laddas din komponent korrekt.