So i have this program in angular where so far i take in a zip code from a user and on button click it sends that input to a function where it is sent off to an api to convert into Lat & Long coordinates. see below:
home.component.html
<div class="center" style="margin-top:50px;">
<label for="ZipCode"><b>Zip Code</b></label>
</div>
<div class="center">
<input name="zipcode" #zipcode id="zipcode" type="text" placeholder="Enter Zip Code" maxlength="5">
</div>
<div class="center" style="margin-top:100px;">
<button class="button button1" (click)="getCoords(zipcode.value)" ><b>Retrieve Data</b></button>
</div>
clearly this is only a snippet of the code but it is enough for display purposes. next is the function with api and it then shifts the view to the stations component/page:
home.component.ts
export class HomeComponent implements OnInit {
constructor(
private router: Router
){}
ngOnInit(): void {
}
getCoords(val: any){
var url = "http://www.mapquestapi.com/geocoding/v1/address?key=MYKEY&location=" val;
fetch(url)
.then((res) => res.json())
.then((data) => {
var lat = data.results[0].locations[0].displayLatLng.lat;
var long = data.results[0].locations[0].displayLatLng.lng;
this.router.navigate(["/stations"])
})
}
}
stations.component.ts - as you can see nothing here yet because i cant figure out what to do
import { Component, Input, OnInit } from '@angular/core';
@Component({
selector: 'app-stations',
templateUrl: './stations.component.html'
})
export class StationsComponent implements OnInit {
ngOnInit(): void {
}
}
now this all works correctly. i have tested the lat and long variables in the console-log and it returns the lat and long just fine. my problem is i need to send the lat and long value to another component/page to be used in calculations. i wont lie by saying i have scoured the internet trying to find a way to do so but apparently it isnt easy in angular to do so. anyone have any ideas on passing the lat and long value to another component/page?
CodePudding user response:
you can use query parameter handling like bellow code ↓
getCoords(val: any){
var url = "http://www.mapquestapi.com/geocoding/v1/address?key=MYKEY&location=" val;
fetch(url)
.then((res) => res.json())
.then((data) => {
var lat = data.results[0].locations[0].displayLatLng.lat;
var long = data.results[0].locations[0].displayLatLng.lng;
this.router.navigate(["/stations"], {queryParams :{ dataLat : lat, dataLong : long}} )
})
}
and in your stations.component.ts you can use ActivatedRoute to get the data:
import { Component, Input, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-stations',
templateUrl: './stations.component.html'
})
export class StationsComponent implements OnInit {
getLat:any;
getLong:any;
constructor(private route: ActivatedRoute) { }
ngOnInit(): void {
this.route.queryParams.subscribe(params => {
this.getLat = params.dataLat;
this.getLong = params.dataLong;
console.log(params);
});
}
}
and you can learn more about that here guide router and here