Angular2 在组件中显示 http get 响应



我正在构建我的第一个 angular2 应用程序,这是我的第一个服务电话。我正在使用服务堆栈 API。GET 调用返回一个 IEnumerable 此调用自行工作,当插入我的角度服务时,状态恢复为 200,我可以在浏览器中看到返回的实际响应。但是,当此响应设置为在组件.html中显示为 li 项时,它不会显示它们。相反,它只显示指示已获取列表项的项目符号,但处理响应的方式存在一些问题。

Category.service.ts 代码如下:

import { Injectable } from '@angular/core';
import { CategoryDTO } from './Category';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class CategoryService {
constructor(private _http: Http) { }
getCategoriesFromApi(): Observable<CategoryDTO[]> {
return this._http.get("http://localhost:53426/category/find")
.map((response: Response) => <CategoryDTO[]> response.json());
}
/**
*
getCategoriesFromApi(): Category[] {
return [{ id: '123', name: 'Apparel' }];
}*/
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

类别.组件.ts如下

import { Component, OnInit } from '@angular/core';
import { CategoryDTO } from './Category';
import { CategoryService } from './category.service';
import { DataserviceService } from '../dataservice.service';
@Component({
selector: 'show-category',
templateUrl: './category.component.html',
styleUrls: ['./category.component.css']
})
export class CategoryComponent implements OnInit {
categoriesToDisplay: CategoryDTO[];
constructor(private categoryService: CategoryService) { }
getCatsToDisplay(): void {
/**
* this.categoriesToDisplay = this.categoryService.getCategoriesFromApi();
*/
this.categoryService.getCategoriesFromApi()
.subscribe((categoriesReturned) => this.categoriesToDisplay = categoriesReturned , err => console.log('err = ' + JSON.stringify(err, null, 2)));
}
ngOnInit() {
this.getCatsToDisplay();
}
/**
* public values: Category[];
constructor(private _dataService: DataserviceService) { }
ngOnInit() {
this._dataService
.getAll<Category[]>()
.subscribe((data: Category[]) => this.values = data);
*/
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

类别.组件.html

如下

<ul>
<li *ngFor="let category of categoriesToDisplay">
<span>{{category.name}}</span>
</li>
</ul>

CategoryDTO 打字稿类 (Category.ts) 是这样的:

export class CategoryDTO {
id: string;
name: string;
}

最后,获取所有类别的 API 调用是这样的:

public IEnumerable<CategoryDTO> Get(FindCategory request)
{
var entities = this.Db.Select<Category>().OrderBy(c => c.Name);
return this.Mapper.Map<List<CategoryDTO>>(entities);
}

我看到的输出是这样的 浏览器上的输出仅显示存在列表项,但不显示类别

您的属性以大写字母开头Id&Name

您需要更新角度代码以使用正确的属性。

export class CategoryDTO {
Id: string;
Name: string;
}
<ul>
<li *ngFor="let category of categoriesToDisplay">
<span>{{category.Name}}</span>
</li>
</ul>

等等!我已经发现了自己的一些问题,但这似乎并不完全是这样。正如LLai所说,很可能是因为您的财产的第一个字母大写!

可能有点奇怪,但改变

this.categoryService.getCategoriesFromApi()
.subscribe((categoriesReturned) => this.categoriesToDisplay = categoriesReturned , err => console.log('err = ' + JSON.stringify(err, null, 2)));

this.categoriesToDisplay = this.categoryService.getCategoriesFromApi()
.subscribe((categoriesReturned) => this.categoriesToDisplay = categoriesReturned , err => console.log('err = ' + JSON.stringify(err, null, 2)));

可能会做到这一点。我遇到了同样的问题,解决方案只是将我想更改的变量分配给 api 调用,此外还更改订阅中的相同变量。我还应该澄清一下,在我的代码中,我没有为我的变量提供类型(即我的变量只是public variable,这并不理想,我仍在寻找解决方案。希望这有帮助,祝你好运!

(我仍然是相当新的Angular,所以如果有人能解释为什么这很可爱。谢谢!

相关内容

  • 没有找到相关文章

最新更新