gpt4 book ai didi

angular - 订阅'不可分配给类型

转载 作者:太空狗 更新时间:2023-10-29 17:49:48 25 4
gpt4 key购买 nike

我在获取在页面上显示结果的服务时遇到问题。错误是订阅方法返回订阅类型,我一直在尝试将其添加到产品数组。产品在 json 文件中。

设置:我正在尝试通过教程学习 Angular 2。本教程已过时,我使用的是最新版本的 angular (ng -v = @angular/cli: 1.4.2)。我使用 ng new 和 ng generate 来设置应用程序。

product-list.component.ts

export class ProductListComponent implements OnInit {

pageTitle = 'Product List';
imageWidth = 50;
imageMargin = 2;
showImage = false;
listFilter = '';
products: IProductList[];
subscription: Subscription;
errorMessage = '';

constructor(private _productListService: ProductListService) {
}

ngOnInit() {
**// ERROR - 'Subscription' is not assignable to type 'IProductList[]'**
this.products = this._productListService.getProducts() // ******** ERROR ******
.subscribe(
products => this.products = products,
error => this.errorMessage = <any>error);
}

product-list.service.ts

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';

import { IProductList } from './product-list';


@Injectable()
export class ProductListService {
private _productListUrl = 'api/product-list/product-list.json';

constructor(private _http: Http) { }

getProducts(): Observable<IProductList[]> {
return this._http.get(this._productListUrl)
.map((response: Response) => <IProductList[]>response.json())
.do(data => console.log('All: ' + JSON.stringify(data)))
.catch(this.handleError);
}

private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server Error');
}
}

product-list.component.html

    <tr *ngFor='let product of products | async | productFilter: listFilter' >
<td>
<img *ngIf='showImage' [src]='product.imageUrl' [title]='product.productName' [style.width.px]='imageWidth' [style.marging.px]='imageMargin'>
</td>
<td>{{product.productName}}</td>
<td>{{product.productCode | lowercase }}</td>
<td>{{product.releaseDate}}</td>
<td>{{product.price | currency:'USD':true:'1.2-2' }}</td>
<td><app-ai-star [rating] = 'product.starRating'
(ratingClicked)='onRatingClicked($event)'></app-ai-star></td>
</tr>

最佳答案

问题是您要对 getProducts() 调用进行订阅。

ngOnInit() {
this.subscription = this._productListService.getProducts() // subscription created here
.subscribe(
products => this.products = products, // value applied to products here
error => this.errorMessage = <any>error);
}

关于angular - 订阅'不可分配给类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com