Reputation: 1152
Angular is it possible to detect if query Paramter has changed? I have a Component that handles 2 query paramters and according to what paramter you come with it sets some variables true or false. The Problem is if im on my component with queryparameter 1 the qp can change to the second paramter without leaving the component and in that case i need to set variables diffrently. So how do I detect that? Is that even possible?
Upvotes: 26
Views: 26812
Reputation: 286
In my case i wanted to reload page if queryParams changed to new...
Router was:
tabs/home/product?id=1984
So I wanted to call productDetails() again if id params is changed!
Solution
constructor(){
//Recive Product Id
activatedRoute.queryParamMap.subscribe((data) => {
if (this.product_id != undefined && this.product_id !=
data['params'].id) {
console.log('we can reload page');
this.product_id = data['params'].id
this. productDetails()
}else{
this.product_id = data['params'].id
}
})
}
it Worked For me! Hope it will Help :)
Upvotes: 1
Reputation: 81
You can subscribe to the params observable provided by ActivatedRoute module to observe changes in the query parameters.
constructor(private route:ActivatedRoute) {
this.route.params.subscribe(
(params:Params)=>{
console.log(params['yourId']);
};
)}
Upvotes: 4
Reputation: 657466
You can subscribe to the params in the root component
constructor(route:ActivatedRoute) {
route.queryParams.subscribe(p => console.log(p.myQueryParam)); // you can also do this in ngOnInit
}
See also https://angular.io/api/router/ActivatedRoute
You can have query params on other route levels as well, but then they are called matrix parameters.
See also the end of this section https://angular.io/guide/router#route-parameters-required-or-optional
Upvotes: 44