输入的数字将通过将变量从 page.html 传递到 services.ts 添加到 API URL Key 值

Posted

技术标签:

【中文标题】输入的数字将通过将变量从 page.html 传递到 services.ts 添加到 API URL Key 值【英文标题】:Inputted number will add to API URL Key value via passing variable from page.html to services.ts 【发布时间】:2020-08-22 06:45:24 【问题描述】:

我是 Ionic、Angular 和 Typescript 的新手,输入的数字是否有可能作为键值之一添加到 API URL?我在 Key event filtering (with key.enter) 下关注了这个guide

这是我的页面.html

    <ion-input placeholder="Number" [(ngModel)]="myNum"  (keyup.enter)="onEnter()"></ion-input>

  <ng-container *ngIf="!error; else errorContent">

    <p *ngFor="let order of orders; let i=index;">
      <ion-item *ngIf="i==0">Number : <b> order?.Number </b></ion-item>

      <ion-item class="listDetails">

        <p class="listTitle">
          order?.status 
          <br />
          <a>
             order?.date | date: 'MMM dd, yyyy' 
            <br />
             order?.time 
          </a>
        </p>

        <p class="listComment">
           order?.comment 
        </p>

      </ion-item>

这是我的示例 API URL。

'https://myapi.com/FoodDeliveryTracking?&userName=myuser&password=mypass&MyNumber='+myNum

这是我的页面.ts

constructor(private dataService: DataService, private http: HttpClient) 
  this.data = '';
  this.error = '';
 


orders= [];
ionViewWillEnter() 
  // Load the data
  this.dataService.getRemoteData(this.myNum).subscribe( //comment this if you will use local data
    data => 
      // Takes data into in single Array and print 
      this.orders = data.output.Result.FoodOrderTracking;
    ,
    err => 
      // Set the error information to display in the template
      this.error = `An error occurred, the data could not be retrieved: Status: $err.status, Message: $err.statusText`;
    
  );


    this.dataService.getRemoteData(this.myNum).subscribe(data => 
      console.log("Remote Data:");
      console.log(data);
    );
  

  onEnter () 

    this.dataService.getRemoteData(this.myNum).subscribe(data=>
    
      console.log('data', data)
    )
     

这是我的 data.services.ts,用于从我的 API url 获取数据。

import  Injectable  from '@angular/core';
import  HttpClient, HttpHeaders  from '@angular/common/http';

@Injectable(
  providedIn: 'root'
)
export class DataService 
  myNum = ''
  onEnter (docNum: string) this.myNum = myNum
  apiUrl = 'http://127.0.0.1:8080/https://myapi.com/FoodDeliveryTracking?&userName=myuser&password=mypass&MyNumber='+myNum';
  apiKey = ''; // <-- Enter your own key here!



    constructor(private http: HttpClient)


    getRemoteData()
      let headers = new HttpHeaders('apiKey': this.apiKey);
      headers.append('Accept','application/json');
      headers.append('X-Requested-With','XMLHttpRequest');
      headers.append('content-type','application/json');
      return this.http.get(this.apiUrl, headers: headers);
    



如何将我在 page.html 上的输入中的变量传递给 services.ts?可能吗?所以在我的 services.ts 中

myNum = 从我的 html.page 上的 ion-input 输入的数据

【问题讨论】:

【参考方案1】:

试试这个

在您的 html 模板中使用数据绑定

 <ion-input placeholder="Number" [(ngModel)]="myNum"  (keyup.enter)="onEnter()"></ion-input>

component.ts

修改页面上的onEnter调用服务

onEnter () 

  this.dataService.getRemoteData(this.myNum).subscribe(data=>
  
    console.log('data', data)
  )
   

dataservice.ts

只需使用 API 的基本网址

 apiUrl = 'http://127.0.0.1:8080/https://myapi.com/FoodDeliveryTracking';

修改getRemoteData,使用HttpParams发送查询参数。

getRemoteData(myNum: string)
    let headers = new HttpHeaders('apiKey': this.apiKey);

    //Set query string parameters
    let params = new HttpParams()
    .set('MyNumber', myNum) 
    .set('userName','myuser')
    .set('password','mypass');

    return this.http.get(this.apiUrl, headers, params).subscribe(data =>console.log('data', data));

这是demo code on stackblitz。当然,由于 api url 不存在,http 请求不会成功,但是您可以在网络调试器中看到它正在发送所有参数

【讨论】:

谢谢!但它只在控制台中更新,而不是在 UI 中它不会在 UI 中显示数据 哦,没关系,我明白了,我只需要将我的数据放在 OnEnter() 下的数组中。谢谢! 是的,我不知道你有什么样的数据。很高兴你成功了【参考方案2】:

据我了解,您正在更新myNum,但apiUrl 保持不变。

要解决这个问题,您可以将 apiUrl 设为计算属性,如下所示:

get apiUrl () 
  return 'http://127.0.0.1:8080/https://myapi.com/FoodDeliveryTracking?&userName=myuser&password=mypass&MyNumber=' + this.myNum';

这将确保使用更新 myNum 值计算 URL,而不是在服务初始化期间仅设置一次。

此外,您可能需要确保正确编码此参数以在 URL 中使用。如果它是一个数字 - 您可以通过将 type="number" 添加到您的 &lt;ion-input&gt; 来强制它。或者在将其添加到 URL 之前使用 encodeURIComponent。

【讨论】:

【参考方案3】:
let myParams = 'foo': 'hi there', 'bar': '???';

let u = new URLSearchParams(myParams).toString();

console.log(u);

【讨论】:

如何应用这个? :) 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。

以上是关于输入的数字将通过将变量从 page.html 传递到 services.ts 添加到 API URL Key 值的主要内容,如果未能解决你的问题,请参考以下文章

如何将变量作为标准输入从 PHP 传递到命令行

我想将变量从 URL 传递到输入文本字段

通过回声管道将python变量(字符串)传递给bash命令[重复]

将变量从输入传递到 GraphQL 搜索调用

将变量传递给从命令行运行的 PHP 脚本

将变量从 Access(前端)传递到 Oracle(后端)存储过程