2016-12-25 73 views
2

我正在處理Angular 2示例應用程序,下面是我的一個組件的代碼。Angular 2中的路由參數

export class ProductComponent implements OnInit { 

    product:Product; 

    constructor(private appService: AppService , private router:Router ,private route:ActivatedRoute) {} 

ngOnInit() 
{ 

    let id:string; 
    let pid:string; 

    this.route.params.subscribe((params) => { 
    id = params['id']; 
    pid = params['pid'];  
    this.appService.GetProduct(id,pid).subscribe(data => { 
     this.product = data; 
    }); 
}) 

}

在這種partcular成分,我的意圖是讀兩種路由參數(ID,PID),然後對服務方法的調用。 但由於要讀取2個路由參數,服務方法被調用兩次。

任何想法需要修改什麼以便服務方法被調用一次?

+0

你說'this.appService.GetProduct()'被調用兩次,因爲有兩個路由參數? – inspired

回答

0

以下文字來自this鏈接解決了我的問題。

現在,如果在檢測組件的內容/視圖子級更改期間發生錯誤,ngOnInit將被調用兩次(在DynamicChangeDetector中可見)。這可能導致跟蹤錯誤,從而隱藏原始錯誤。

在我的情況下,我的組件還有一些其他錯誤,導致ngOnInit()執行兩次..希望這對其他人有用。我在這個問題上花了2小時:(

0

您可以使用switchMap:

this.route.params 
.switchMap(({id, pid}) => appService.GetProduct(id,pid)) 
.subscribe(data => this.product = data);