如何在打字稿中将存储在 Observable<any> 中的值转换为字符串?

Posted

技术标签:

【中文标题】如何在打字稿中将存储在 Observable<any> 中的值转换为字符串?【英文标题】:How to convert the value stored in Observable<any> to a string, in typescript? 【发布时间】:2017-07-22 02:47:54 【问题描述】:

您好,我是 Angular 和 TypeScript 的新手。我需要字符串格式的Observable 的值,如何做到这一点?

BmxComponent 文件

export class BmxComponent 
    asyncString = this.httpService.getDataBmx();
    currentStock = this.httpService.getDataBmx2(); //this is what I want to covert to a string so I can pass it to onSubmit()

    onSubmit() 
        const asnNumm = this.currentStock; // passing it here changes my database, see below
        this.httpService.sendData( stock: asnNumm )
            .subscribe(
            data => console.log(data),
            error => console.log(error)
            );
    

HttpService 文件

export class HttpService 

    constructor(private http: Http) 

    getDataBmx() 
        return this.http.get('https://the-bicycle-shop.firebaseio.com/products/Bicycles/bmx/stock.json')
            .map((response: Response) => response.json());
    

    getDataBmx2() 
        return (this.http.get('https://the-bicycle-shop.firebaseio.com/products/Bicycles/bmx/stock.json'));
       

    sendData(newStock: any) 
        const body = JSON.stringify(newStock);
        const headers = new Headers();
        headers.append('Content-Type', 'application/json');
        return this.http.patch('https://the-bicycle-shop.firebaseio.com/products/Bicycles/bmx.json', body, 
            headers: headers
        )
            .map((data: Response) => data.json())
            .catch(this.handleError);
    

    private handleError(error: any) 
        console.log(error);
        return Observable.throw(error.json());
    

html 文件

<p>asyncString | async</p> // displays 1234 which is the correct value
<p>asyncString</p> // displays [object Object]
<p>currentStock</p> // displays [object Object]
<button class="btn btn-success" (click)="onSubmit()">Change Database</button>

onSubmit() 之前的我的数据库(当我单击更改数据库按钮时使用)

Bicycles
|
---bmx
    |
    ---stock = 1234;

onSubmit() 后我的数据库

Bicycles
|
--- bmx
     |
     ---stock
         |
         --- _isScalar = false

我为此使用 Firebase。

我知道它可以使用字符串,因为我是这样测试的:

    onSubmit() 
        const asnNumm = "33333" //the change to test it
        this.httpService.sendData( stock: asnNumm )
            .subscribe(
            data => console.log(data),
            error => console.log(error)
            );
    

这对我的数据库有什么影响

Bicycles
|
---bmx
    |
    ---stock = 33333

我知道currentStock 将保存当前存储在我的数据库中的相同值,因此没有区别,但我想在将其转换为字符串后对其进行更改。

基本上,我想更改数据库中的“库存”,但每次按下“更改数据库”按钮时都会更改固定数量,例如,每次按下时都会减去 1。

【问题讨论】:

请分享一些代码... @Roman toString 只是给了我 [object Object] @questions 看下面的答案 【参考方案1】:

订阅 observable 获取结果并在收到值时调用onSubmit

currentStock = this.httpService.getDataBmx2()
.subscribe(val => this.onSubmit(val));

【讨论】:

这不起作用,因为 onSubmit() 不接受值 这样添加参数不会很难吗? 添加了一个参数,现在我又得到了[object Object] 你在哪里添加了什么参数?【参考方案2】:

Objects 有toString 方法,您可以实现该方法来显示对象的值,或者像这样使用JSON.stringify() 将其转换为字符串

this.httpService.sendData( stock: asnNumm )
        .subscribe(
        data => console.log(JSON.stringify(data)),
        error => console.log(error)
        );

您必须映射到响应对象以获取数据,以文本形式获取数据您可以查询响应对象

getDataBmx2() 
    return this.http.get('https://the-bicycle-shop.firebaseio.com/products/Bicycles/bmx/stock.json')
        .map((response: Response) => response.text());



export class BmxComponent 
    currentStock: string;

   this.httpService.getDataBmx2().subscribe(s => this.currentStock = s); //this is what I want to covert to a string so I can pass it to onSubmit()

    onSubmit() 
        const asnNumm = this.currentStock; // passing it here changes my database, see below

【讨论】:

我可以举个例子吗?当我实现这个时,我只会得到一大堆错误。 我没有错误,我不确定你在说什么。 @RomanC 我认为他试图将您示例中的代码用作属性定义而不是值。 @roman 我的意思是你能举例说明如何在我的代码中使用它吗?

以上是关于如何在打字稿中将存储在 Observable<any> 中的值转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿类中将 mat-stroked-button 更改为 mat-button?

如何在打字稿接口/类型中将枚举值类型转换为数组?

如何在 React Native 项目中将 JS 库导入打字稿

更新可观察打字稿中的数组值

如何在打字稿中将类型本地添加到无类型的 npm 模块?

在javascript中将数字转换为数组| angular7的打字稿[重复]