Angular2响应未投射

时间:2016-04-12 21:54:59

标签: spring-boot angular

我正在调用我的后端服务器(Spring Boot)并返回一个对象列表Foo。

然而,当我在* ng中列出我的对象时,它根本不会迭代。我知道我的服务器返回了两个对象的列表,因为我已经调试了它,并且响应返回的是两个对象的数组。我想我错过了一个愚蠢的步骤,非常感谢任何帮助。

foo.ts

name: string;
id: number;
description: string;

列表foo.service.ts

@Injectable
export class ListFooService
constructor(private _http: Http) {}
private _getFooUrl = '/api/foos/foos';

getFoos() {
    return this._http.get(this._getFooUrl)
        .map(res => <Foo[]> res.json())
        .do(data => console.log(data))
}

我知道这会返回一个包含两个对象的数组,如链接的最后一步所示。

@Component({
selector: 'foo-component',
templateUrl: 'app/templates/foo.component.html'
})


export class FooComponent implements OnInit {

constructor(private _listFooService:ListFooService) {
}

foos:Foo[];
errorMessage:string;

ngOnInit() {
    this.getFoos();
}

getFoos() {
    this._listFooService.getFoos()
        .subscribe(
            foos => {this.foos = foos; console.log("Foos"); console.log(this.foos)},
            error => this.errorMessage = <any>error);
    }
}

和我的foo.component.html

<ul>
<li *ngFor="#foo of foos">
    {{foo.name}}
</li>
</ul>
test

除了测试(除了我的阻止之外)之外我什么都没有显示

如果它有帮助,那么就是后端

FooController.java

@RequestMapping("/connectors")
public @ResponseBody List<Foo> getFooList()
{
    return fooDAO.getAllFoos(); //this works
}

和Foo.java

private String name;
private int id;
private String description;
//getters and setters

和我的html文件中的<head>

<script src="node_modules/angular/angular.min.js"></script>
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>

<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.min.js"></script>
<script src="node_modules/angular2/bundles/router.min.js"></script>
<script src="node_modules/angular2/bundles/upgrade.js"></script>
<script src="node_modules/angular2/bundles/http.min.js"></script>

从服务器返回的JSON响应是

[
 {
  "name": "Foo",
  "id": 1,
  "description": "FooBar"
 },
 {
   "name": "Foo2",
   "id": 2,
   "description": "FooBar2"
 }
]

3 个答案:

答案 0 :(得分:1)

我想你应该删除angular1引用:<script src="node_modules/angular/angular.min.js"></script>,如果它仍然无法将你的脚本顺序和模块版本与angular2-quickstart样本进行比较。

答案 1 :(得分:0)

如果您获得JavaScript代码中的数据,可能您忘记将angular2-polyfills.js包含在主HTML文件中。这包含负责触发更改检测的ZoneJS。后者将相应地更新视图。

以下是该行:

<script src="node_modules/angular/bundles/angular2-polyfills.js"></script>

有关详细信息,请参阅此链接:

答案 2 :(得分:0)

将您的foos声明更改为

foos:Foo[] = [];

这是猜测,因为您没有显示错误消息,但我已经看到了未初始化集合的此行为。

如果没有,控制台中是否有任何错误报告?