将值传递给另一个组件

Posted

技术标签:

【中文标题】将值传递给另一个组件【英文标题】:Passing values to another component 【发布时间】:2021-12-31 16:36:53 【问题描述】:

所以我有这个程序的角度,到目前为止,我从用户那里获取一个邮政编码,然后点击按钮,它将输入发送到一个函数,在那里它被发送到一个 api 以转换成纬度和经度坐标。见下文:

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>

显然,这只是代码的 sn-p,但足以用于显示目的。接下来是带有 api 的函数,然后它将视图转移到站组件/页面:

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 - 你在这里什么也看不到,因为我不知道该怎么做

import  Component, Input, OnInit  from '@angular/core';


@Component(
  selector: 'app-stations',
  templateUrl: './stations.component.html'
)

export class StationsComponent implements OnInit 
  

  ngOnInit(): void 
  


现在这一切正常。我已经在控制台日志中测试了 lat 和 long 变量,它返回 lat 和 long 就好了。我的问题是我需要将经纬度值发送到另一个组件/页面以用于计算。我不会撒谎说我已经搜索了互联网试图找到一种方法,但显然这样做并不容易。有人对将 lat 和 long 值传递给另一个组件/页面有任何想法吗?

【问题讨论】:

【参考方案1】:

您可以使用如下代码处理查询参数↓

   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 )
        )        
    

在您的stations.component.ts 中,您可以使用ActivatedRoute 来获取数据:

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); 
    );
  

您可以在此处了解更多信息 guide router 和 here

【讨论】:

我在dataLat: lat 下得到了一些 squigglys,错误显示:Argument of type ' dataLat: any; dataLong: any; ' is not assignable to parameter of type 'NavigationExtras'. Object literal may only specify known properties, and 'dataLat' does not exist in type 'NavigationExtras'. nvm 我使用您提供的链接将queryParams: 添加到this.router.navigate(["/stations"], queryParams: dataLat : lat, dataLong : long) 的内部,现在它可以工作了。太感谢了!!你太棒了! 我可以帮忙,我更新答案。 你能点击接受答案按钮吗:) 对此感到抱歉。 SO还是新手。完成了:)再次感谢!

以上是关于将值传递给另一个组件的主要内容,如果未能解决你的问题,请参考以下文章

不能将值传递给另一个 viewController?

如何将值传递给另一个视图控制器?

将值传递给另一个类

如何使用 nodejs 将值传递给另一个函数?

动态地将值(例如:innerHTML)传递给另一个元素作为值

AngularJS - 将值传递给组件